我有以下TSQL:
CREATE TABLE #RefTables(RefTable varchar(50) , row varchar(50), id int)
insert into #RefTables
select
CONVERT(varchar, tblReferenceTables.description, 0) as RefTable,
CONVERT(varchar, tblReferenceTableRows.description, 0) as row,
tblReferenceTableRows.id
from
tblReferenceTables
inner join
tblReferenceTableRows on tblReferenceTables.id = tblReferenceTableRows.ref_table_id
where
tblReferenceTables.type_id in (0, 2)
and tblReferenceTables.id in (3, 4, 14)
但是返回异常:
插入错误:列名或提供的值数与表定义不匹配
有人会告诉我这有什么问题吗?我尝试使用CAST
也没有成功。如果我不使用临时表,查询就会正常执行。
我需要将数据类型更改为varchar
,以便我可以聚合原始表格中的文本字段。
参考:
修改
看起来因为原始表中的字段名称(description
)分别与临时表字段的名称不匹配,所以似乎是错误的原因。如果我添加另一个临时表重命名文本字段一切正常。这似乎是SQL引擎的限制?
编辑2
使用marc_s's
建议也解决了错误,而不需要另一个临时表 - 谢谢!请将您的评论移至答案,以便我将其标记为此问题的解决方案。
答案 0 :(得分:0)
此错误的唯一解释是,在编译问题中显示的代码时,已经存在一个名为#RefTables
的表,其中包含不同的模式。
尝试运行DROP TABLE #RefTables
进行清理,然后在单独的批处理中执行问题中的代码。
此错误的简单演示是
CREATE TABLE #RefTables (x INT, Y INT)
GO
CREATE TABLE #RefTables (x INT)
INSERT INTO #RefTables VALUES (1)
哪个投掷
Msg 213,Level 16,State 1,Line 4
列名或提供的数量 值与表定义不匹配。