2010-01-07 51 views
0

是否可以将不同的选择值存储到同一个变量中?如何将不同的选择值存储到同一个变量

DECLARE @cout int 

SELECT @cout= count(*) FROM Master1 WHERE (...) 

SET @cout = SELECT count(*) FROM Master2 WHERE (...) 

SET @cout = SELECT count(*) FROM Master3 WHERE (...) 

IF(@cout = 0) 
BEGIN 
END 

回答

0

如何:

IF EXISTS 
(
SELECT 1 FROM Master1 WHERE (...) 
UNION ALL 
SELECT 1 FROM Master2 WHERE (...) 
UNION ALL 
SELECT 1 FROM Master3 WHERE (...) 
)  
BEGIN 
... 
END 

它应该做的伎俩,并拉出足够快的速度......

0

不,你在那里会取代价值。您可以将它们作为字符串追加,或者将这些数字相加。但这是不好的做法;更好地返回一个结果,即:

SELECT 
    (select count(*) FROM Master1 WHERE (...)) as 'Foo1', 
    (SELECT count(*) FROM Master2 WHERE (...)) as 'Foo2', 
    (select count(*) FROM Master3 WHERE (...)) as 'Foo3' 
+0

如果这些语句中的任何一个返回1,我必须停止进程 PLS。我想知道更好的方法 – Geeth 2010-01-07 05:23:22

+0

然后声明单个变量并在每次赋值后检查结果,然后按照上面的结果返回结果集。明白了吗? – 2010-01-07 05:24:18

+0

好的谢谢。没有其他更好的选择? – Geeth 2010-01-07 05:29:06

0

你想只运行,如果没有这些存在。

您可以使用EXISTS关键字。

就是这样。

IF NOT EXISTS SELECT ID FROM Master1 WHERE (...) 
    IF NOT EXISTS SELECT ID FROM Master2 WHERE (...) 
    IF NOT EXISTS SELECT ID FROM Master3 WHERE (...) 
    BEGIN 
     ..do stuff... 
    END 

请注意,如果count为零,我不会使用count NOT EXISTS是真的。选择任何列以使查询运行。

现在不能测试,语法可能是这样的:

IF NOT EXISTS (SELECT ID FROM Master1 WHERE (...)) 
    IF NOT EXISTS (SELECT ID FROM Master2 WHERE (...)) 
    IF NOT EXISTS (SELECT ID FROM Master3 WHERE (...)) 
    BEGIN 
     ..do stuff... 
    END 
相关问题