需要执行超过4k char的动态SQL查询

Dib*_*iya 0 sql sql-server

我需要执行一个SQL查询,其中包含超过4000个字符.

我使用以下代码来执行此操作:

create Table #sqlquery (querystring nvarchar(MAX))

declare @len nvarchar (MAX)

insert into #sqlquery (querystring) values('select * from TableA')
insert into #sqlquery (querystring) values('Where ID =3')

SELECT TOP 1  
   @len = STUFF ( ( SELECT ' ' + r.querystring  FROM #sqlquery AS r  FOR XML PATH(''), TYPE).value('.[1]','nvarchar(max)'), 1,1,'' )FROM #sqlquery

exec sp_executesql  @len
Run Code Online (Sandbox Code Playgroud)

即使我定义了nvarchar(max)它,它也会截断最后的字符.

Rhy*_*nes 5

正如@NoDisplayName和@JeroenMostert在评论中所回答的那样,SP_EXECUTESQL将unicode字符串取为nvarchar(max),但PRINT语句截断为4,000个unicode字符或8,000个非unicode.

如果您想要查看比PRINT更多的动态查询,那么您可以使用SELECT.您可能需要更新查询选项以显示更长的值输出.