SQL:一次运行两个查询并分配变量

时间:2016-08-17 10:10:01

标签: c# sql sql-server

我基本上试图运行这两个查询:

SELECT * FROM ProductTable;

SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM UserTable WHERE id = 41;

两个查询都正常工作。第一个返回ProductTable中的所有数据。在检查行ID 41是否存在后,第二个查询返回10

一起运行

SELECT * FROM ProductTable SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM UserTable WHERE id = 41

但是,当我运行它时,第二个查询不返回任何值,这是因为我没有为它设置SQL变量名。

如何将变量名称设置为第二个查询,以便在读取SQL响应时可以读取该值?

4 个答案:

答案 0 :(得分:2)

DECLARE @val BIT
SELECT @val = CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM UserTable WHERE id = 41

SELECT P.*, @val FROM ProductTable P

答案 1 :(得分:2)

如果在检查行ID 41是否存在之后需要1或0(然后是Pinwar13回答)此代码执行得更好,无需计算所有行

DECLARE @val BIT = CASE WHEN EXISTS (SELECT 1 FROM UserTable WHERE id = 41)
THEN 1 ELSE 0 END;

SELECT P.*, @val FROM ProductTable P

答案 2 :(得分:1)

试试这个,

SELECT *
    ,(
        SELECT CAST(CASE 
                    WHEN COUNT(*) > 0
                        THEN 1
                    ELSE 0
                    END AS BIT)
        FROM UserTable
        WHERE id = 41
        ) AS UserCount
FROM ProductTable;

答案 3 :(得分:1)

你也可以使用交叉申请..

SELECT p.*,t.[BIT] FROM ProductTable p
   CROSS APPLY (SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS [BIT])
                FROM UserTable WHERE id = 41)t