当前位置:  开发笔记 > 编程语言 > 正文

为什么T-SQL块即使不执行也会出错?

如何解决《为什么T-SQL块即使不执行也会出错?》经验,为你挑选了1个好方法。

我正在编写一个(看似)直接的SQL片段,在确保列存在后删除列.
问题:如果列不存在,代码 IF子句抱怨说,它无法找到列!好吧,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 Edition.



1> TcKs..:
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"等构造,并简单地检查代码中所有使用的对象.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有