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