私は、パラメータを受け取り、パラメータの内容を評価し、内容によっては入力パラメータに異なるUDFを適用するSQLの一部を持っています。私が何をしたいか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を使用することはできません
私は他の空の一時テーブルステートメントは唯一の1を作成した場合、オブジェクトが(存在しないと言ってもエラーチェックを無視することはできません2つの一時テーブル)
出力を別の一時テーブルに取得する方法がわかりません。任意のアイデアの提案や同じように行うより良い方法はどうですか?
入力パラメータの "。" – Harry
私はそれを正しく理解していれば、一時テーブルを削除することで全体を単純化できると思います。例えば、 '(ORDER_NOとしてNを選択f_getallnbetweenから(@order)CHARINDEX( ' ' @order)> 0組合から全てdbo.f_splitlist(@order、'、')CHARINDEXから[値]を選択しORDER_NO選択( '、' @order)> 0)を指定します。ここで、order_no <> ''; ' – ZLK
@ZLK Doh!なぜ私はそれを考えなかったのですか?ちょっとしたコードを作っていくのがいかに簡単かを示しています。これを答えとして書くと、私はそれを受け入れることができます。ありがとうございました! – Harry