Sql server har(max)并使用executesql(@strsql)代替executesql。通过这种方式,您得到了完整的打印查询,它也将执行您的查询。希望能有所帮助。

Sql server har(max)并使用executesql(@strsql)代替executesql。通过这种方式,您得到了完整的打印查询,它也将执行您的查询。希望能有所帮助。,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,使用sp\u executesql对于这种类型的查询是非常好的选择,并且对于sql注入来说不是非常友好 例: 使用exec sp_executesql命令时,将变量声明为nvarchar类型。 例如 注意:不要在exec命令中使用括号,SQL将NVARCHAR作为参数而不是VARCHAR,将VARCHAR(max)更改为NVARCHAR(max)将解决此问题 DECLARE @sqlstr AS nvarchar (max) 你说的截断代码是什么意思?什么时候打印?如果是,则不是截断。它只是

使用sp\u executesql对于这种类型的查询是非常好的选择,并且对于sql注入来说不是非常友好

例:


使用exec sp_executesql命令时,将变量声明为nvarchar类型。
例如


注意:不要在exec命令中使用括号,SQL将NVARCHAR作为参数而不是VARCHAR,将
VARCHAR(max)
更改为
NVARCHAR(max)
将解决此问题

DECLARE @sqlstr AS  nvarchar (max)

你说的截断代码是什么意思?什么时候打印?如果是,则不是截断。它只是不打印您所有的代码。由于nvarchar的最大长度(max)是4000,超过它,它会对剩余的查询进行分段查看
在中查看时避免截断我想提出3个非常强烈的建议。首先是停止使用varchar存储日期时间数据。帮自己一个大忙,使用datetime数据类型。这就是他们的目的。第二个建议是停止直接在动态sql中执行参数。这对sql注入是完全开放的。第三件事是阅读本文,了解如何最好地编写这种类型的全面查询。
DECLARE @sqlString nvarchar(500);
DECLARE @paramDefinition nvarchar(500);

DECLARE @sid int = 12546;

SET @sqlString = 'select * from SameTableBase S Where S.Id = @id';
SET @paramDefinition = N'@id int'; 
EXECUTE sp_executesql @sqlString , @paramDefinition , @id = @sid
Declare @Sqlstr nvarchar(max)
SET @Sqlstr='...Your dynamic query...'
exec sp_executesql @Sqlstr
DECLARE @sqlstr AS  nvarchar (max)