gpt4 book ai didi

sql - 为什么即使不应该执行 T-SQL block 也会出错?

转载 作者:行者123 更新时间:2023-12-04 14:33:47 25 4
gpt4 key购买 nike

我正在编写一个(看似)直接的 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”等......构造,并简单地检查代码中所有使用的对象。

关于sql - 为什么即使不应该执行 T-SQL block 也会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/120966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com