gpt4 book ai didi

sql - 在 SQL 中检查 IF 条件,即使它不匹配

转载 作者:行者123 更新时间:2023-12-03 23:28:57 24 4
gpt4 key购买 nike

我的代码中有 2 个 if 条件。如果它符合条件 1,它会从某个 View 执行选择,这没关系。但是,如果它符合条件 2,它会从另一个已损坏的 View (尽管它存在)中进行选择,因为它引用了不再存在的表中的列。

我的意图是不费心修复 View (或删除它),因为我有一个逻辑可以操纵变量使其落入引用工作 View 的条件下。

但是,似乎 SQL 验证了代码中的所有 View ,即使它在一个从未执行过的 IF block 中,也会生成错误:

Msg 207, Level 16, State 1, Procedure vtest_table, Line 21
Invalid column name 'name'.
Msg 4413, Level 16, State 1, Line 32
Could not use view or function 'vtest_table' because of binding errors.

例子:

create database test

create table test_table (
id int identity(1,1),
name varchar(20)
)
go

create view vtest_table
as
select id, name
from test_table
go

-- breaking the view
alter table test_table
drop column name
go

declare @var int
set @var = 2
if (@var = 2) -- it should fall under this condition and execute this block
begin
print 'test'
end

-- however, the view in the select statement in this block is checked, and as the view is broken, it returns the error.
else if (@var = 1)
begin
select * from vtest_table
end

值得注意:如果我引用了一个根本不存在的 View ,请说:

else if (@var = 1)
begin
select * from viewthatdoesntexist
end

它正确执行。如果 View 存在,SQL 似乎只检查依赖关系。

最佳答案

更新您的 View ,因为您从表中删除了名称列

alter view vtest_table
as
select id
from test_table

关于sql - 在 SQL 中检查 IF 条件,即使它不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44183570/

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