【发布时间】:2017-01-20 18:17:26
【问题描述】:
我一直试图找出这个动态 SQL 插入语句有什么问题。显然,当我将一串值传递给它以插入时,它导致的错误使它看起来像是正确解析,但它说它与语句中指定的列数不匹配。我附上了我要插入数据的表定义、动态语句和下面的值参数:
M2016_Field_ID 列是一个标识列,不需要插入,与具有分配当前日期的默认约束的 Enabled_ON 列相同。
@valuesList = '(''description'', ''0,0'')'
SET @sql = N' INSERT INTO tblM2016_MetaData_Fields ' +
N' (Name, FieldNum) ' +
N' VALUES (@values);';
SET @params = N'@values nvarchar(max)';
IF @debug = 1
BEGIN
PRINT @sql;
PRINT @params;
PRINT @valuesList;
END
ELSE
EXEC sp_executesql @sql, @params, @values = @valuesList;
当我尝试执行语句时,它会抛出以下错误:
消息 109,第 15 级,状态 1,第 3 行
INSERT 语句中的列多于 VALUES 子句中指定的值。 VALUES 子句中的值数必须与 INSERT 语句中指定的列数匹配。
【问题讨论】:
-
insert中有两列,values中只有一列。仅仅因为一个字符串可能包含逗号并不会把它变成多个值。 -
我现在明白了。谢谢。
标签: sql sql-server sql-server-2016