1

我有一个看起来像这样的字符串:

set @sqlstring = N'select @mindate = min(time), @maxdate = max(time) from ' + @st_churn_active_table;

我打印它,它看起来像这样:

从derp.derp_table中选择@mindate = min(time), @maxdate = max(time)

我使用如下参数定义运行 sp_executesql:

执行 sp_executesql @sqlstring, N'@maxdate date,@mindate date'

它的错误如下:

参数化查询 '(@maxdate date,@mindate date)select @mindate = min(time), @maxda' 需要未提供的参数 '@maxdate'。

String 变成
'(@maxdate date,@mindate date)select @mindate = min(time), @maxda'
sql 字符串被截断,有谁知道为什么以及如何解决这个问题?

谢谢!

4

2 回答 2

2

请参阅:在 SQL Server 中使用 sp_executesql 存储过程时如何指定输出参数

于 2011-10-04T17:55:10.420 回答
1

首先,sql server 看到了整个字符串。它只是截断它的错误消息。请注意,即使截断的 sql 字符串只有部分名称,错误也正确获取了缺少参数的名称。

其次,这不会按照您的意愿工作。您不能以这种方式对 sp_executesql 使用输出参数。

但最后是为什么它会抛出错误的问题。我不能确定,但​​我怀疑这里的问题是类型不匹配,所以它不能使用你给它的参数。我希望 sql server 在这种情况下会抛出更好的错误消息(抱怨类型不匹配),但是我没有方便的 sql server 来测试,我想不出任何其他原因导致问题。

于 2011-10-04T18:00:41.230 回答