我需要执行以下逻辑子句:
如果列存在且具有特定值,则执行某些操作。 如果没有,那就做点别的。
IF EXISTS(
SELECT *
FROM sys.columns
WHERE Name = N'legacyoptions'
AND Object_ID = Object_ID(N'config '))
BEGIN
if ( select legacyoptions from config)=1
begin
Do stuff when legacy=1
end
else begin
Do stuff when legacy !=1
END
else
begin
do stuff when legacy is not present
end
但是,如果legacyoptions
不存在,这不起作用
答案 0 :(得分:1)
试试这个:(我想你要留下if的结尾)
IF EXISTS(
SELECT *
FROM sys.columns
WHERE Name = N'legacyoptions'
AND Object_ID = Object_ID(N'config '))
BEGIN
if ( select legacyoptions from config)=1
begin
Do stuff when legacy=1
end
else begin
Do stuff when legacy !=1
END
end
else
begin
do stuff when legacy is not present
end
答案 1 :(得分:1)
这是使用TRY CATCH块和动态SQL的方式,因此这个代码块将在数据库中没有表config
和/或legacyoptions
字段的情况下进行编译。
BEGIN TRY
DECLARE @legacyoptions int;
EXECUTE sp_executesql N'select TOP 1 @legacyoptions=legacyoptions from config',
N'@legacyoptions int OUTPUT',
@legacyoptions OUTPUT;
if @legacyoptions=1
begin
-- Do stuff when legacy=1
end
ELSE
BEGIN
-- Do stuff when legacy !=1
END
END TRY
BEGIN CATCH
-- do stuff when legacy is not present
END CATCH
答案 2 :(得分:0)
这有效,但对我来说似乎很愚蠢。
IF EXISTS( SELECT * FROM sys.columns WHERE Name = N'legacyoptions' AND Object_ID = Object_ID(N'config '))
BEGIN
exec('
if (select legacyoptions from config)=1
begin
print ''Config==1''
end
else
begin
print ''Config!=1''
end
')
end
else
begin
print 'no legacy'
end