我有一个字符串,看起来像这样:
<>之前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日期,@mindate日期'之前错误如下:
<>之前参数化查询'(@maxdate date,@mindate date)select @mindate = min(时间),@maxda'期望参数'@maxdate',该参数未提供。之前字符串变成
'(@maxdate日期,@mindate日期)select @mindate = min(时间),@maxda'
sql字符串被切断,有人知道为什么以及如何解决这个问题吗?
谢谢!
参见:如何在SQL Server中使用sp_executesql存储过程时指定输出参数
首先,sql server看到了整个字符串。只有错误消息截断了它。注意,该错误使缺失参数的名称正确,即使截断的sql字符串只包含名称的一部分。
第二,这不会像你想的那样工作。对于sp_executesql,不能这样使用输出参数。
但最后的问题是为什么它抛出一个错误。我不能确定,但我怀疑这里的问题是存在类型不匹配,因此它不能使用您给它的参数。我希望sql server在这种情况下会抛出一个更好的错误消息(抱怨类型不匹配),但是我没有sql server方便测试,我想不出任何其他原因会导致这个问题。