【问题标题】:Use #temp inside a parenthesis在括号内使用#temp
【发布时间】:2013-06-14 13:31:17
【问题描述】:

如何在括号内使用#temp?

或者如何在括号内使用表变量?

显然,真正的查询要复杂得多。

失败:

IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
CREATE TABLE #Temp (sID int NOT NULL);
select count(*) 
from 
(
  insert into #Temp 
  select top 10 sID from [docSVsys]  
  select * from #temp
) as [count] 
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp

失败:

select count(*) 
from 
(
  IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
  CREATE TABLE #Temp (sID int NOT NULL);
  insert into #Temp 
  select top 10 sID from [docSVsys]  
  select * from #temp
) as [count] 
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp

作品:
但我需要在括号内使用#temp

IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
CREATE TABLE #Temp (sID int NOT NULL);
insert into #Temp 
select top 10 sID from [docSVsys]  
select * from #temp
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 

【问题讨论】:

  • 如果您只需要知道inserted 有多少行,@@ROWCOUNT 有什么问题?
  • @Damien_The_Unbeliever 来自问题:“显然,真正的查询要复杂得多。”
  • 刚刚注意到您的“真正的查询要复杂得多”,这可能会使我之前的评论偏离目标。但问题真的是,你想做什么? “将 X 放在括号中”从来都不是要求——您还没有告诉我们您的实际要求是什么。您告诉我们的只是您对问题的感知解决方案是“将 X 放在括号中”。
  • 您可能需要检查What is the XY Problem?
  • 上述问题的答案是。 “做不到”。

标签: sql-server-2008 tsql temp-tables


【解决方案1】:

您只能在括号中使用 SELECT 语句(子查询)。但是你不能在这里使用 INSERT 语句(#-table 无所谓)。试试

IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp 
CREATE TABLE #Temp (sID int NOT NULL);

insert into #Temp 
select top 10 sID from [docSVsys];

select count(*) 
from 
(
  select * from #temp
) as [count] 
IF OBJECT_ID(N'tempdb..#Temp', N'U') IS NOT NULL DROP TABLE #Temp

或者对于复杂的情况使用OUTPUT clause

【讨论】:

  • 感谢工作。不要认为输出是我需要的。填充 #temp 很昂贵,然后在某些连接和联合中重用它以获得“结果”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
相关资源
最近更新 更多