2015-02-09 92 views
0

我在写一个测试某个软件函数的查询。该查询显示如果没有任何返回,测试通过。这是查询:有条件地插入列

INSERT INTO ResultsTable VALUES(N'$(Var1)', N'$(Var2)', $(SELECT * 
FROM Table1 
WHERE Table1.Column1 = ''), GetDate(), $(Var3)); 

我怎样才能得到的PASS的“SELECT * FROM Table1 WHERE Table1.Column1 = '')”输入一个值,如果如果返回的所有东西没有价值回归或FAIL

编辑:要增加一些清晰度,此查询正在通过批处理文件执行。 Var1,Var2和Var3都是在批处理脚本中声明的变量,并被拖入该查询中。

我在批处理脚本中看起来像这样的一行。

sqlcmd -S SERVER -D DATABASE -v Var1 = "!Variable1!" Var2 = "%Variable2%" 
Var3 = "!Variable3!" -i "\\path\to\the\query.sql" 

,其中顶部的查询地处文件“query.sql的”

2日编辑:它大概重要补充,有在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等,因为它们都是占位符,我也懒得确保它们一致。

每个查询的,应倾倒成果转化有像这样有组织列结果表:

| Var1 | Var2 | Result | DateRun | Var3 | 
|  |  |   |   |  | 

回答

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 = '' 
+0

如果我从批处理文件执行查询,这种格式会工作吗? Var1,Var2是在批处理文件中声明的变量。更具体地说,select语句从Table1中提取值,但其他变量是从其他位置声明的。 – David 2015-02-09 19:15:17

+0

如果将它们正确地声明为SQL服务器变量,它将起作用。我不明白你在批处理文件中运行SQL的含义。也许你可以更详细地描述你想要做的事情。 – HLGEM 2015-02-09 19:24:04

+0

我正在使用'sqlcmd'函数进行批处理脚本执行批处理脚本中的查询。我做了一个编辑,试图澄清。 – David 2015-02-10 14:29:01