繁体   English   中英

SQL 验证列名是否存在时出现错误,说明列名无效。 为什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM