回答

收藏

当我验证(如果存在)时,SQL错误指出无效列名。为什么?

技术问答 技术问答 249 人阅读 | 0 人回复 | 2023-09-14

有一个创建新列的过渡脚本DOCUMENT_DEFINITION_ID以MESSAGE_TYPE_ID  ; t  g; k2 {! r- O# r. [! C
5的值过渡,然后删除MESSAGE_TYPE_ID列。
& \0 i& k1 N7 y. l' R一切第一次正常运行,但当我第二次运行脚本时,出现了这个错误:
5 Q. [9 u0 G) r# c5 y2 @& Z无效的列名“ MESSAGE_TYPE_ID”。) W: d- C: x/ r% w
这毫无意义,因为我已经验证了列是否存在。) p! }) K! V% n9 r% J: O
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为什么?
+ n$ v: K$ q# D1 N                                                                # _' |+ s9 k# ]1 ]3 z' {4 m5 |* Q
    解决方案:                                                                6 I3 m) M3 g+ C5 I
                                                                试试这个% L* K' n2 Q4 N! q; x" A; u$ X
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在动态语句中包装更新,绕过延迟名称分析。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则