[英]SQL error stating invalid column name when I have verification if it exists. Why?
有暂存脚本,它创建新列 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
为什么?
尝试这个
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 验证器:
IF 1 = 0
alter table DOCUMENT_QUEUE add MESSAGE_TYPE_ID int NULL;
这段代码永远不会运行,但 SQL 验证器并不知道它。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.