我正在编写一个(貌似)简单明了的SQL代码段,该代码段在确保该列存在之后将其删除。 问题:如果列不存在,代码 内 IF子句抱怨说,它无法找到列!好了, 卫生署 ,这就是为什么它的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 Edition。
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 Server编译代码时,他们检查它是否已使用对象(如果存在)。此检查过程将忽略任何“ IF”,“WHILE”等构造,并仅检查代码中所有使用的对象。