SQL Server:使用动态查询时存储过程参数被截断

gan*_*esh 5 sql-server

我使用的是动态存储过程,参数值非常长(超过8000个字符)。

另一个存储过程正在动态查询(@SP)内部调用,当我执行SP时,参数被截断。

如何获取完整参数?我错过了什么??

因此我无法执行查询。

ALTER PROCEDURE [dbo].["SP_NAME"]
    @ID varchar(50),
    @<parameter> nvarchar(max), 
AS
   SET NOCOUNT ON

   DECLARE @SP nvarchar(MAX)
   set @SP = '

   DECLARE @sampleNVARCHAR nvarchar(MAX)
   SET @sampleNVARCHAR= '''+ @<parameter>+ '''

   EXEC <anotherSP> @sampleNVARCHAR,'+ cast(@CLIENTOFFSET as varchar(10)) +''

   EXEC sp_executesql @SP
   RETURN
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 2

如果您领导与变量的串联,nvarchar(max)它将为您工作。

设置为空字符串并在串联表达式中@SP使用。@SP

declare @SP nvarchar(max);
set @SP = '';
set @SP = @SP + N'declare @sample....' + @Param
Run Code Online (Sandbox Code Playgroud)

您可以在自己的机器上或在此SQL Fiddle中运行测试

declare @SP nvarchar(max)
declare @Param nvarchar(max) = 'ParamString'

set @SP = replicate(N'X', 3000) + replicate(N'Y', 3000) + @Param
select len(@SP) -- Truncated to 4011 characters

set @SP = ''
set @SP = @SP + replicate(N'X', 3000) + replicate(N'Y', 3000) + @Param
select len(@SP) -- Not truncated, shows 6011 characters
Run Code Online (Sandbox Code Playgroud)