一尘不染

为什么即使不应该执行,T-SQL块也会给出错误?

sql

我正在编写一个(貌似)简单明了的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。


阅读 116

收藏
2021-05-23

共1个答案

一尘不染

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”等构造,并仅检查代码中所有使用的对象。

2021-05-23