【问题标题】:Store a list of numbers returned by a query into a variable将查询返回的数字列表存储到变量中
【发布时间】:2019-04-18 07:37:51
【问题描述】:

我想将这样的查询返回的Ids 存储到一个变量中:

SELECT FooId FROM Bar; -- FooId is of type int

这样我以后可以说:

DELETE FROM Foo WHERE Id IN @TheFooIdsIGotFromThePreviousQueryAbove;

我该怎么做?具体来说,我必须声明这样一个列表变量的数据类型是什么?

请注意,我可以简单地完成:

DELETE FROM Foo WHERE Id IN (SELECT FooId FROM Bar);

但我不能这样做,因为这只会使问题复杂化。

我使用的是 Microsoft SQL Server 2014。

【问题讨论】:

  • 使用temp tabletable variable存储Id
  • 您可以使用 OUTPUT 子句,但我不确定它是否存在于 mysql 中。链接 https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql?view=sql-server-2017 。并且可以使用表变量。
  • @ch2019 输出子句在这里帮不上忙,问题不在于mysql。

标签: sql sql-server sql-server-2014


【解决方案1】:

使用temp tabletable variable 存储Id

-- declare table variable
declare @IDS table (Id int)

-- insert into the table variable
insert into @IDS (Id) SELECT FooId FROM Bar

-- join the table variable to the table you want to delete
DELETE d
FROM   Foo d
       INNER JOIN @IDS i ON d.Id = i.Id

【讨论】:

    【解决方案2】:

    也可以使用临时表

    SELECT FooId AS ID INTO #tmp_bar FROM Bar 
    
    --#tmp_bar can be used as a normal table
    SELECT ID FROM #tmp_bar 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2015-06-11
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 2013-04-24
      相关资源
      最近更新 更多