Dev*_*Dev 2 sql-server-2008 sql-server-2008-r2
我正在使用 SQL Server 2008 R2。我为某些迁移创建了一些 SQL 语句:
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='TableA' AND COLUMN_NAME='Status')
BEGIN
UPDATE TableA
SET Status = 'Active'
WHERE Status IS NULL
END
Run Code Online (Sandbox Code Playgroud)
现在,我已经Status从数据库表中删除了该列TableA。
再次当我执行上述块时,虽然我检查了该列是否存在,但只有这样它才应该执行该UPDATE语句,它给了我错误
无效的列名“状态”
如何摆脱这个错误?
谢谢
您需要将代码放在单独的范围/批次中运行:
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='TableA' AND COLUMN_NAME='Status')
BEGIN
EXEC('UPDATE TableA SET Status=''Active'' WHERE Status IS NULL')
END
Run Code Online (Sandbox Code Playgroud)
您当前遇到的问题是系统希望在执行任何部分之前编译您的代码批次。它不能编译的UPDATE语句,因为遗漏了某个列,所以它甚至从未有机会开始执行代码,并考虑是否该EXISTS谓词返回TRUE或FALSE。