私はまた、私がExecに送信していたものを見たいと思っており、PRINTの制限によって混乱しました。 procをチャンクで印刷する必要がありました。
CREATE PROCEDURE [dbo].[KFX_PrintVarcharMax]
@strMax varchar(max)
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@index int = 0,
@start int = 1,
@blkSize int = 2000;
WHILE @Start < LEN(@strMax)
BEGIN
IF @start + @blkSize >= LEN(@strMax)
BEGIN
-- If remainder is less than blocksize print the remainder, and exit.
PRINT SUBSTRING(@strMax, @start, @blkSize)
BREAK;
END
-- Else find the next terminator (beyond the blksize)
SET @index = CHARINDEX(CHAR(10), @strMax, @start + @blkSize);
if @index >= @start
BEGIN
PRINT SubString(@strMax, @start, @index - @start + 1)
SET @start = @index + 1;
SET @blkSize = CASE WHEN @start + 2000 < LEN(@strMax) THEN 2000
ELSE LEN(@strMax) - @start + 1 END
END
ELSE
BEGIN
-- No char(10) found. Just print the rest.
PRINT SUBSTRING(@strMax, @start, LEN(@strMax))
BREAK;
END
END
END
は、私はあなたが混乱していると思う、あなたは 'その@strが、私は問題のより具体的に質問を編集した – Lamak
切り捨てされているという意味ではありませんので、8000個の以上の文字をPRINT'することはできません。実際にEXECUTEでエラーが発生したときは、PRINTを使用して動的T-SQLが生成されたものを確認しました。どちらの場合も、nvarchar(MAX)値は切り捨てられていました。何か案は? –