我正在编写一个(看似)直接的 SQL 片段,它在确保列存在后删除该列。
问题:如果该列不存在,则代码insideIF 子句抱怨它找不到该列!出色地,doh,这就是为什么它位于 IF 子句内!
所以我的问题是,为什么一段不应该执行的代码会出错?
这是片段:
IF exists (select * from syscolumns
WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
ALTER TABLE [dbo].[Table_MD]
DROP COLUMN timeout
END
GO
...这是错误:
Error executing SQL script [...]. Invalid column name 'timeout'
我正在使用 Microsoft SQL Server 2005 Express 版。
IF exists (select * from syscolumns
WHERE id=object_id('Table_MD') and name='timeout')
BEGIN
DECLARE @SQL nvarchar(1000)
SET @SQL = N'ALTER TABLE [dbo].[Table_MD] DROP COLUMN timeout'
EXEC sp_executesql @SQL
END
GO
原因:
当 Sql 服务器编译代码时,它们会检查已使用的对象(如果存在)。此检查过程忽略任何“IF”、“WHILE”等构造,并简单地检查代码中所有使用的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)