Процедура, позволяющая вывести очень длинный текст переменной nvarchar. Полезно в случаях, когда переменная используется для перекладки динамического кода.
ALTER PROCEDURE [dbo].[Print_Unlimited] @String NVARCHAR(MAX)AS
BEGIN
BEGIN TRY ---------------------------------------------------------------------------------
DECLARE @CurrentEnd BIGINT; /* track the length of the next substring */ DECLARE @Offset TINYINT; /* tracks the amount of offset needed */ SET @String = replace(replace(@String, CHAR(13) + CHAR(10), CHAR(10)), CHAR(13), CHAR(10))
WHILE LEN(@String) > 1 BEGIN IF CHARINDEX(CHAR(10), @String) BETWEEN 1 AND 4000 BEGIN SET @CurrentEnd = CHARINDEX(CHAR(10), @String) -1 SET @Offset = 2 END ELSE BEGIN SET @CurrentEnd = 4000 SET @Offset = 1 END PRINT SUBSTRING(@String, 1, @CurrentEnd) SET @String = SUBSTRING(@String, @CurrentEnd + @Offset, LEN(@String)) END /*End While loop*/
--------------------------------------------------------------------------------- END TRY BEGIN CATCH DECLARE @ErrorMessage VARCHAR(4000) SELECT @ErrorMessage = ERROR_MESSAGE() RAISERROR(@ErrorMessage,16,1) END CATCHEND