动态SQL插入:列名或提供的值数与表定义

时间:2015-07-31 13:00:29

标签: sql-server tsql

我遇到了一些动态SQL查询的奇怪行为。 在存储过程中,我使用多个字符串构造插入查询字符串。由于单个nvarchar长度限制,我在SP中执行插入查询。

EXEC(@QuerySelectPT+@QueryFromPT+@QueryFromPT)

如果我打印查询的每个部分,将这些部分放在一起并在Management Studio中手动执行它们,查询工作正常并插入数据。但是,如果我在存储过程中的EXEC()方法中执行查询,我会得到一个

Column name or number of supplied values does not match table definition.

错误讯息。

多次检查我的查询和插入表中的数量,列的拼写,但到目前为止我没有发现任何差异。

有任何建议吗?

2 个答案:

答案 0 :(得分:0)

您对insert的列数与select的列数不同。在exec之前打印语句并找到错误。

答案 1 :(得分:0)

它是在黑暗中拍摄但看到你告诉查询是有效的,如果你手动构建最终查询并且它正在工作,问题可能是由字符串截断引起的。

你可以尝试一下:

EXEC(CAST(@QuerySelectPT AS VARCHAR(MAX))+@QueryFromPT+@QueryFromPT);

另外,由于我认为Management Studio的消息标签和选择仅限于4000个符号,您可以测试整个查询是否正确汇编:

SELECT CAST(@QuerySelectPT+@QueryFromPT+@QueryFromPT AS XML)