0

我有以下 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以便可以聚合原始表中的文本字段。

参考:

  • SQL Server 2005 企业版

编辑

似乎是因为description原始表中的字段名称(分别)与临时表字段的名称分别不匹配,这似乎是导致错误的原因。如果我添加另一个临时表重命名文本字段,一切正常。这似乎是 SQL 引擎的限制?

编辑 2

使用marc_s's建议还可以解决错误而无需另一个临时表 - 谢谢!!!请移动您的评论以回答,以便我将其标记为此问题的解决方案。

4

1 回答 1

0

对此错误的唯一解释是,在编译问题中显示的代码时,已经存在一个#RefTables使用不同架构调用的表。

尝试运行DROP TABLE #RefTables以清理它,然后在单独的批处理中执行问题中的代码。

此错误的简单演示是

CREATE TABLE #RefTables (x INT, Y INT)
  
GO

CREATE TABLE #RefTables (x INT)

INSERT INTO #RefTables VALUES (1)

哪个抛出

消息 213,第 16 层,状态 1,第 4 行

列名或提供的值的数量与表定义不匹配。

于 2013-10-30T15:31:07.423 回答