【发布时间】:2015-07-31 21:41:09
【问题描述】:
我在动态 SQL 查询中遇到了一些奇怪的行为。 在存储过程中,我从多个字符串中构造了一个插入查询字符串。我像这样在 SP 中执行插入查询 - 由于单个 nvarchar 长度限制。
EXEC(@QuerySelectPT+@QueryFromPT+@QueryFromPT)
如果我打印查询的每个部分,将这些部分放在一起并在 Management Studio 中手动执行,查询工作正常并插入数据。但是,如果我在存储过程的 EXEC() 方法中执行查询,我会得到一个
Column name or number of supplied values does not match table definition.
错误信息。
对我的查询和插入表中的列的数量、拼写进行了多次检查,但到目前为止我还没有发现任何差异。
有什么建议吗?
【问题讨论】:
-
查询的字符串部分之间是否有空格?
-
在此处粘贴整个字符串。你提供的信息还不够。我自己犯了这样的错误 - 再次检查最后的字符串
-
回显
@QuerySelectPT+@QueryFromPT+@QueryFromPT以及它生成的SQL -
不可能是客户端,但字符串部分之间有空格,并且查询中有换行符。但整个查询的打印工作
-
看不到整个查询,但这是 sql 注入漏洞的尖叫声。参数化你的动态 sql 而不是仅仅构建一个字符串并执行它会更好。
标签: sql-server tsql