我基本上试图运行这两个查询:
SELECT * FROM ProductTable;
SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM UserTable WHERE id = 41;
两个查询都正常工作。第一个返回ProductTable中的所有数据。在检查行ID 41是否存在后,第二个查询返回1
或0
一起运行
SELECT * FROM ProductTable SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM UserTable WHERE id = 41
但是,当我运行它时,第二个查询不返回任何值,这是因为我没有为它设置SQL变量名。
如何将变量名称设置为第二个查询,以便在读取SQL响应时可以读取该值?
答案 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