2010-10-20 34 views
0

我正在SQL Server 2008中工作,我試圖根據一定的條件選擇到一個臨時表...對於一個報告,我需要高達 18%的記錄是某種產品類型。SQL服務器條件選擇到臨時表

if ((@totalRecords * .18) > @productTypeCount) 
    select * into #tmpLP_REIT 
    from myTable where productType = @productType 
else 
    select top 18 percent * into #tmpLP_REIT 
    from myTable where productType = @productType 

我不斷收到錯誤「中已存在的數據庫名爲‘#tmpLP_REIT’對象」,雖然我知道這是不存在,因爲當我嘗試刪除這樣的表,它指出,它不」不存在。 我也在else子句中得到這個錯誤。

它似乎忽略了我的if語句,並通過創建第一個表格,然後嘗試再次創建它。有什麼建議麼?

請高級謝謝。

回答

1

這段代碼是在一個循環中嗎?..這將解釋錯誤,如果它發生在第二次。如果不是,語法檢查器必須窒息,因爲它看到2個查詢創建相同的表,沒有意識到它是一個條件。

一個解決方案是先創建表,然後將這兩個查詢的語法更改爲insert into查詢。

另一種解決方案是使用動態SQL ...在條件中構建正確的查詢,然後執行它。這應該會通過您當前觸發的驗證。

+0

我試圖避免這種情況的原因是因爲這只是我創建的大量表格中的第一個......相當大的表格,所以選擇進入會削減很多代碼和努力:) – IWriteApps 2010-10-20 16:57:38

+0

@Gio啊..好吧,我給我的答案增加了另一種可能性。另外,你沒有提到它是否在循環中? – Fosco 2010-10-20 17:41:33

+0

哦對不起,不在一個循環。 – IWriteApps 2010-10-20 17:49:55