我有验证时是否存在SQL错误,指出无效的列名称是否存在。为什么?

时间:2010-10-11 11:52:45

标签: sql database tsql

有一个暂存脚本,它创建新的DOCUMENT_DEFINITION_ID列,其值为MESSAGE_TYPE_ID + 5,然后删除列MESSAGE_TYPE_ID。

第一次一切运行正常,但是当我第二次运行脚本时,我收到了这个错误:

  

无效的列名称'MESSAGE_TYPE_ID'。

没有任何意义,因为我确认该列是否存在。

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'MESSAGE_TYPE_ID' AND TABLE_NAME = 'DOCUMENT_QUEUE')
BEGIN
  UPDATE DOCUMENT_QUEUE SET DOCUMENT_DEFINITION_ID = MESSAGE_TYPE_ID + 5 --Error here.. but condition is not met

为什么?

2 个答案:

答案 0 :(得分:21)

试试这个

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'MESSAGE_TYPE_ID' AND TABLE_NAME = 'DOCUMENT_QUEUE')
BEGIN
   EXEC( 'UPDATE DOCUMENT_QUEUE SET DOCUMENT_DEFINITION_ID = MESSAGE_TYPE_ID + 5 ')
END

它通过将更新包装在动态语句中来绕过延迟的名称解析。

答案 1 :(得分:0)

名称的延迟解析仅发生在不存在的表上。您将需要删除并创建整个表。