2015-02-10 43 views
0

我正在嘗試修改別人寫過的查詢來做一些測試。在這個文件中有幾個查詢會提取數據,只要沒有結果產生,那麼一切都很好。在這個查詢中有幾個地方我不明白,但我真正想知道的唯一事情是如果我沒有生成結果,我可以插入'PASS'或'FAIL'值。如何在表返回null時插入字符串?

declare @i int, @d nvarchar (3), @max int, @db nvarchar (100), 
@query nvarchar (max), @base_db_name nvarchar(50), @use_loop int; 

select name 
from sys.databases 


IF OBJECT_ID('tempdb..#TABLE1') IS NOT NULL 
BEGIN 
    DROP TABLE #TABLE1 
END 

create table #TABLE1 (
    Column1 datatype, 
    Column2 datatype, 
    Column3 datatype, 

IF OBJECT_ID('tempdb..#TABLE2') IS NOT NULL 
BEGIN 
    DROP TABLE #TABLE2 
END 

create table #TABLE2 (
    Column1 datatype, 
    Column2 datatype, 
    Column3 datatype, 
    ) 

IF OBJECT_ID('tempdb..#TABLE3') IS NOT NULL 
BEGIN 
    DROP TABLE #TABLE3 
END 

create table #TABLE3 (
    Column1 datatype, 
    Column2 datatype, 
    Column3 datatype, 
    ) 

IF OBJECT_ID('tempdb..#TABLE4') IS NOT NULL 
BEGIN 
    DROP TABLE #TABLE4 
END 

create table #TABLE4 (
    Column1 datatype, 
    Column2 datatype, 
    Column3 datatype, 
    ) 


IF OBJECT_ID('tempdb..#TABLE5') IS NOT NULL 
BEGIN 
    DROP TABLE #TABLE5 
END 

create table #TABLE5 (
    Column1 datatype, 
    Column2 datatype, 
    Column3 datatype, 
    ) 

IF OBJECT_ID('tempdb..#TABLE6') IS NOT NULL 
BEGIN 
    DROP TABLE #TABLE6 
END 

create table #TABLE6 (
    Column1 datatype, 
    Column2 datatype, 
    Column3 datatype, 
    ) 



While @i <= @max 
Begin 
    if @use_loop = 1  
    Begin 
     set @d = CAST(@i as nvarchar); 
     Set @db = @base_db_name [email protected]+ '].dbo.'; 
    End 


Set @query = cast(' 
    *QUERY GOES HERE* 
    ' as nvarchar(max)) 
Insert INTO #TABLE1 
Execute (@query) 


Set @query = cast(' 
    *QUERY GOES HERE* 
    ' as nvarchar(max)) 
Insert INTO #TABLE2 
Execute (@query) 


Set @query = cast(' 
    *QUERY GOES HERE* 
    ' as nvarchar(max)) 
Insert INTO #TABLE3 
Execute (@query) 

Set @query = cast(' 
    *QUERY GOES HERE* 
    ' as nvarchar(max)) 
Insert INTO #TABLE3 
Execute (@query) 


Set @query = cast(' 
    *QUERY GOES HERE* 
    ' as nvarchar(max)) 
Insert INTO #TABLE4 
Execute (@query) 


Set @query = cast(' 
    *QUERY GOES HERE* 
    ' as nvarchar(max)) 
Insert INTO #TABLE5 
Execute (@query) 


Set @query = cast(' 
    *QUERY GOES HERE* 
     ' as nvarchar(max)) 
    Insert INTO #TABLE6 
    Execute (@query) 



    set @i = @i + 1; 
End 
GO 

Select * 
from #TABLE1; 

Select * 
from #TABLE2; 

Select * 
from #TABLE3; 

Select * 
from #TABLE4; 

Select * 
from #TABLE5; 

Select * 
from #TABLE6; 

它真的很長我意識到,但我試圖保持簡單,只有肉和土豆。我想知道的是,當查詢從表1-6末尾抽取結果時,如何在沒有任何顯示的情況下將值插入到完全不同的表(如ResultsTable)中,並顯示合格/不合格的值?

+0

批次標籤是因爲這個腳本是從一個批處理腳本調用。我只是添加它,沒有想到我沒有在帖子中引用它。 – David 2015-02-10 21:00:24

+0

有人可以解釋爲什麼我已經downvoted? – David 2015-02-10 21:00:58

+0

'ResultsTable'已經是一個現有的表嗎?如果所有其他表都是空白的,您是否只希望它填充? – 2015-02-10 21:12:24

回答

1

這種簡單的方法,但無可否認不優雅,也只是在你創建的6個表來計算記錄數:

IF ((SELECT COUNT(*) FROM #Table1) 
    + (SELECT COUNT(*) FROM #Table2) 
    + (SELECT COUNT(*) FROM #Table3) 
    + (SELECT COUNT(*) FROM #Table4) 
    + (SELECT COUNT(*) FROM #Table5) 
    + (SELECT COUNT(*) FROM #Table6)) > 0 
    INSERT INTO ResultsTable (FieldName) VALUES ('Fail'); 
ELSE 
    INSERT INTO ResultsTable (FieldName) VALUES ('Pass'); 
+0

嘿優雅有時被高估。我認爲這將是相當簡單的,但對於我的生活,我只是無法弄清楚。謝謝! – David 2015-02-10 21:17:10

相關問題