如何重用请求的结果(SQL)

时间:2013-01-29 16:34:53

标签: sql tsql stored-procedures

我想编写一个类似下面的存储过程

allInterestingKeys = SELECT MyKey FROM MyTable WHERE CreatedDate < CAST('2013-01-01' AS date)
DELETE MyTable01 WHERE MyKey IN allInterestingKeys
DELETE MyTable02 WHERE MyKey IN allInterestingKeys 
...
DELETE MyTable10 WHERE MyKey IN allInterestingKeys 

理想情况下,我只想运行SELECT MyKey FROM MyTable WHERE ...一次,以使程序比

更有效和可读
DELETE MyTable01 WHERE MyKey IN (SELECT MyKey FROM MyTable WHERE CreatedDate < CAST('2013-01-01' AS date))
DELETE MyTable02 WHERE MyKey IN (SELECT MyKey FROM MyTable WHERE CreatedDate < CAST('2013-01-01' AS date))
...
DELETE MyTable10 WHERE MyKey IN (SELECT MyKey FROM MyTable WHERE CreatedDate < CAST('2013-01-01' AS date))

编码它的最佳方法是什么?感谢。

1 个答案:

答案 0 :(得分:2)

使用临时表! SELECT INTO是最简单的,但您也可以提前设计表格并INSERT INTO临时表

SELECT MyKey 
INTO #allInterestingKeys
FROM MyTable 
WHERE CreatedDate < CAST('2013-01-01' AS date)

然后从临时表中选择列表

DELETE MyTable01 WHERE MyKey IN (SELECT MyKey FROM #allInterestingKeys)

INNER JOIN到临时表中删除

DELETE t
FROM MyTable01 t
INNER JOIN #allInterestingKeys k
  ON t.MyKey = k.MyKey