我需要执行一个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)它,它也会截断最后的字符.
正如@NoDisplayName和@JeroenMostert在评论中所回答的那样,SP_EXECUTESQL将unicode字符串取为nvarchar(max),但PRINT语句截断为4,000个unicode字符或8,000个非unicode.
如果您想要查看比PRINT更多的动态查询,那么您可以使用SELECT.您可能需要更新查询选项以显示更长的值输出.