我使用的是动态存储过程,参数值非常长(超过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)
如果您领导与变量的串联,nvarchar(max)它将为您工作。
设置为空字符串并在串联表达式中@SP使用。@SP
declare @SP nvarchar(max);
set @SP = '';
set @SP = @SP + N'declare @sample....' + @Param
Run Code Online (Sandbox Code Playgroud)
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)