我正在编写一个测试某个软件功能的查询。该查询显示如果没有返回任何内容,测试将通过。这是查询:
INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)', $(SELECT *
FROM Table1
WHERE Table1.Column1 = ''), GetDate(), $(Var3));
如何获得" SELECT * FROM Table1 WHERE Table1.Column1 = '')
"如果没有返回值,则输入值PASS
;如果返回任何值,则输入FAIL
?
编辑:为了增加一些清晰度,此查询正在通过批处理文件执行。 Var1,Var2和Var3都是在批处理脚本中声明的变量,并被引入此查询。
我在批处理脚本中有一行看起来像这样。
sqlcmd -S SERVER -D DATABASE -v Var1 = "!Variable1!" Var2 = "%Variable2%"
Var3 = "!Variable3!" -i "\\path\to\the\query.sql"
其中顶部的查询位于文件" query.sql"
中第二次编辑:在我的批处理脚本中执行的query.sql文件中添加多个查询可能很重要。
我觉得它不会像编写由分号;
分隔的大量查询一样简单(我从答案中知道语法不正确,只是为了证明一点)
INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)', $(SELECT *
FROM Table1
WHERE Table1.Column1 = ''), GetDate(), $(Var3));
INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)',
$(SELECT q1.Column1, q1.Column2, q1.Column3, q2.Column4, q1.Column5-
q2.Column6 AS placeholdername1
FROM (SELECT Table3.Column1, Table3.Column2, count(*) AS placeholdername2
FROM Table3
GROUP BY Table3.Column1, Table3.Column2) AS q1 INNER JOIN
(SELECT Table4.Column1, Table4.Column2,
count(*) AS placeholdername3
FROM Table4 INNER JOIN
Table5 ON Table4.Columnname=
Table5.id
GROUP BY
Table5.Columm1, Table5.Column2) AS
q2 ON q1.Column1= q2.Column1 AND q1.Column2= q2.Column2
WHERE q1.Column2 - q2.Column2> 1), GetDate(), $(Var3));
请忽略所有占位符值,例如column1,table3等,因为它们都是占位符,我并不打算确保它们是一致的。
这些查询中的每一个都应该将结果转储到Results表中,该表的列组织如下:
| Var1 | Var2 | Result | DateRun | Var3 |
| | | | | |
答案 0 :(得分:1)
如果您想要选择,首先不能使用值子句。并且永远不会在没有指定要插入的字段的情况下进行插入。
Insert into ResultsTable (field1, field2, field3, field4, field5)
Select @var1, @var2, case when count(*) = 0 then'Fail' else 'Pass' end, getdate(), @var3
from Table1
WHERE Table1.Column1 = ''