我有一塊SQL接受參數,評估參數的內容並根據內容對輸入參數應用不同的UDF。SQL Server聯合臨時表
的代碼是這樣的:
declare @order varchar(50) = 's12345..s12347'
if isnull(CHARINDEX('.',@order),0) >0
begin
select n as order_no into #temp
FROM F_GetAllNBetween(@order)
end
else if (isnull(CHARINDEX(',',@order),0) >0)
begin
select [value] as order_no into #temp2
FROM dbo.F_SplitList(@order,',')
end
if OBJECT_ID('tempdb..#temp') is not null
select * from #temp where order_no <>''
if OBJECT_ID('tempdb..#temp2') is not null
select * from #temp2 where order_no <>''
我想要做的是,讓從以上工會輸出到另一個臨時表和代碼的其餘部分的where子句中使用它。
我不能使用聯合,因爲它錯誤說預計選擇。
,因爲我無法使用檢查,看是否臨時表是空的,我不能使用CTE
我不能忽略檢查空的臨時表否則它錯誤說對象不存在(if語句只創建的一個兩個臨時表)
我無法弄清楚如何獲得輸出到不同的臨時表。任何想法建議或更好的方式做同樣的請嗎?
輸入參數將只有一個「。」。 (句號)或者一個「,」(逗號) – Harry
我想你可以通過刪除臨時表來簡化整個事情,如果我正確理解它的話。例如,'select order_no from(from order_no from f_getallnbetween(@order)where charindex('。',@order)> 0 union all select [value] from dbo.f_splitlist(@order,',')where charindex (','@order)> 0)as t where order_no <>'';' – ZLK
@ZLK Doh!爲什麼我沒有想到這一點!只是要說明讓代碼工作是多麼容易。寫這個答案,我可以接受它。謝謝! – Harry