SQL 服务器联合临时表

SQL Server union temp tables

我有一段 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 <>''

我想做的是,将上述联合的输出放入另一个临时文件 table 并在其余代码的 where 子句中使用它。

我不能使用 union,因为它会出错,说需要 select。

我无法使用 cte,因为我无法使用检查来查看临时 tables 是否为空

我不能忽略对空临时 table 的检查,否则它会出错说对象不存在(如果语句只创建两个临时 table 之一)

我不知道如何让输出达到不同的温度 table。请问有什么想法建议或更好的方法吗?

如我的评论所述,您可以简化当前代码以使用 UNION 和 WHERE 子句替换 IF 语句来实现您想要的。例如

SELECT order_no
--INTO #someTempTable -- if needed
FROM (
    SELECT order_no = n 
    FROM dbo.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 <> '';