有一个临时脚本,该脚本创建新的列DOCUMENT_DEFINITION_ID以MESSAGE_TYPE_ID + 5的值对其进行分级,然后删除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

为什么?

最佳答案

尝试这个

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

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

关于sql - 验证是否存在无效列名时出现SQL错误。为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3905910/

10-09 01:28