Syntax error: parse error, when creating a regression test checking empty tables
Syntax error: parse error, when creating a regression test checking empty tables
我正在创建一个回归测试查询,该查询将检查 table 是否已填充。这是通过获取每个 table A、B、C 中的第一行来完成的,如果它的 id 存在,它将获得值 "Y"。如果不是则值 "N"。我创建了下面的代码来执行以下操作,但出现语法错误:解析错误。谁能告诉我怎么了?
SELECT
Case
When EXISTS( A.Id) THEN 'Y'
ELSE 'N'
END AS A_exist,
Case
When EXISTS( B.Id) THEN 'Y'
ELSE 'N'
END AS B_exist,
Case
When EXISTS( C.Id) THEN 'Y'
ELSE 'N'
END AS C_exist
FROM
(select top 1 * from Table_A) A
(select top 1 * from Table_B) B
(select top 1 * from Table_C) C
您使用sql服务器吗?这个有用吗?
SELECT
Case
When EXISTS(select * from Table_A) THEN 'Y'
ELSE 'N'
END AS A_exist,
Case
When EXISTS(select * from Table_B) THEN 'Y'
ELSE 'N'
END AS B_exist,
Case
When EXISTS(select * from Table_C) THEN 'Y'
ELSE 'N'
END AS C_exist
您可以使用以下查询。
SELECT
Case
When A.Id IS NOT NULL THEN 'Y'
ELSE 'N'
END AS A_exist,
Case
When B.Id IS NOT NULL THEN 'Y'
ELSE 'N'
END AS B_exist,
Case
When C.Id IS NOT NULL THEN 'Y'
ELSE 'N'
END AS C_exist
FROM
(select top 1 * from Table_A) A,
(select top 1 * from Table_B) B,
(select top 1 * from Table_C) C
;
您可以使用 COUNT
:
为空的 table 强制一行
SELECT
CASE WHEN a.CNT = 1 THEN 'Y' ELSE 'N' END AS A_exist,
CASE WHEN b.CNT = 1 THEN 'Y' ELSE 'N' END AS B_exist,
CASE WHEN c.CNT = 1 THEN 'Y' ELSE 'N' END AS C_exist
FROM
(
SELECT COUNT(*) AS CNT
WHERE EXISTS(SELECT * FROM Table_A)
) AS a,
(
SELECT COUNT(*) AS CNT
WHERE EXISTS(SELECT * FROM Table_B)
) AS b,
(
SELECT COUNT(*) AS CNT
WHERE EXISTS(SELECT * FROM Table_C)
) AS c;
但是为什么不 return 每行 table 而不是一列呢?扩展起来更容易:
SELECT 'Table_A' AS "Table", CASE WHEN COUNT(*) = 1 THEN 'Y' ELSE 'N' END AS "Exists?"
WHERE EXISTS(SELECT * FROM Table_A)
UNION ALL
SELECT 'Table_B', CASE WHEN COUNT(*) = 1 THEN 'Y' ELSE 'N' END
WHERE EXISTS(SELECT * FROM Table_B)
UNION ALL
SELECT 'Table_C', CASE WHEN COUNT(*) = 1 THEN 'Y' ELSE 'N' END
WHERE EXISTS(SELECT * FROM Table_C)
我正在创建一个回归测试查询,该查询将检查 table 是否已填充。这是通过获取每个 table A、B、C 中的第一行来完成的,如果它的 id 存在,它将获得值 "Y"。如果不是则值 "N"。我创建了下面的代码来执行以下操作,但出现语法错误:解析错误。谁能告诉我怎么了?
SELECT
Case
When EXISTS( A.Id) THEN 'Y'
ELSE 'N'
END AS A_exist,
Case
When EXISTS( B.Id) THEN 'Y'
ELSE 'N'
END AS B_exist,
Case
When EXISTS( C.Id) THEN 'Y'
ELSE 'N'
END AS C_exist
FROM
(select top 1 * from Table_A) A
(select top 1 * from Table_B) B
(select top 1 * from Table_C) C
您使用sql服务器吗?这个有用吗?
SELECT
Case
When EXISTS(select * from Table_A) THEN 'Y'
ELSE 'N'
END AS A_exist,
Case
When EXISTS(select * from Table_B) THEN 'Y'
ELSE 'N'
END AS B_exist,
Case
When EXISTS(select * from Table_C) THEN 'Y'
ELSE 'N'
END AS C_exist
您可以使用以下查询。
SELECT
Case
When A.Id IS NOT NULL THEN 'Y'
ELSE 'N'
END AS A_exist,
Case
When B.Id IS NOT NULL THEN 'Y'
ELSE 'N'
END AS B_exist,
Case
When C.Id IS NOT NULL THEN 'Y'
ELSE 'N'
END AS C_exist
FROM
(select top 1 * from Table_A) A,
(select top 1 * from Table_B) B,
(select top 1 * from Table_C) C
;
您可以使用 COUNT
:
SELECT
CASE WHEN a.CNT = 1 THEN 'Y' ELSE 'N' END AS A_exist,
CASE WHEN b.CNT = 1 THEN 'Y' ELSE 'N' END AS B_exist,
CASE WHEN c.CNT = 1 THEN 'Y' ELSE 'N' END AS C_exist
FROM
(
SELECT COUNT(*) AS CNT
WHERE EXISTS(SELECT * FROM Table_A)
) AS a,
(
SELECT COUNT(*) AS CNT
WHERE EXISTS(SELECT * FROM Table_B)
) AS b,
(
SELECT COUNT(*) AS CNT
WHERE EXISTS(SELECT * FROM Table_C)
) AS c;
但是为什么不 return 每行 table 而不是一列呢?扩展起来更容易:
SELECT 'Table_A' AS "Table", CASE WHEN COUNT(*) = 1 THEN 'Y' ELSE 'N' END AS "Exists?"
WHERE EXISTS(SELECT * FROM Table_A)
UNION ALL
SELECT 'Table_B', CASE WHEN COUNT(*) = 1 THEN 'Y' ELSE 'N' END
WHERE EXISTS(SELECT * FROM Table_B)
UNION ALL
SELECT 'Table_C', CASE WHEN COUNT(*) = 1 THEN 'Y' ELSE 'N' END
WHERE EXISTS(SELECT * FROM Table_C)