2015-02-09 95 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