无法将text数据类型转换为varchar

时间:2013-10-30 14:13:46

标签: tsql sql-server-2005 exception casting

我有以下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 Enterprise

修改

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

编辑2

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

1 个答案:

答案 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

     

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