У меня есть кусок SQL, который принимает параметр, оценивает содержимое параметра и в зависимости от содержимого применяет к входному параметру разные UDF.
код выглядит примерно так:
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, так как не могу использовать проверку, чтобы увидеть, пусты ли временные таблицы.
Я не могу игнорировать проверку пустых временных таблиц, иначе он выдает ошибку, говорящую, что объект не существует (если оператор создает только одну из двух временных таблиц)
Я не могу понять, как получить вывод в другую временную таблицу. Любые идеи, предложения или лучший способ сделать то же самое, пожалуйста?
select order_no from (select n as 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 <> '';
- person ZLK   schedule 14.08.2017