我有桌子,table A和table B,C,D etc。table A有三列,即id,date和tracker。
從table A我必須從date資料型別的列中選擇資料超過 30 天的行date。從獲得的結果,我必須DELETE在記錄table B,C,D etc基礎上,id和tracker(跟蹤列的資料將提供目標表名)table A。例如id= 3fromtable A將洗掉列提供的id= 3from的記錄。table B,C,D etctracker
兩個表中的 ID 將相同。表 B、C、D 等將有許多其他列。
uj5u.com熱心網友回復:
所以,這里很簡單,但是
DELETE FROM [Table B]
WHERE
[Table B].[id] IN (SELECT [Table A].[id] AS [innerID]
WHERE [Table A].[date] < DATEADD(DAY, -30, GETDATE()));
它基本上會洗掉表 B 中的所有記錄,這些記錄在表 A 上具有相同的 id 值,并且日期列從今天起超過 30 天
對于其他表,只需重復該程序;您還可以創建一個臨時表變數來存盤該選擇并在下一個查詢中使用它,如下所示:
DECLARE @ids TABLE(id INT);
INSERT INTO @ids(id)
SELECT [Table A].[id] AS [innerID]
WHERE [Table A].[date] < DATEADD(DAY, -30, GETDATE());
DELETE FROM [Table B] WHERE [Table B].[id] IN (SELECT id FROM @ids);
DELETE FROM [Table C] WHERE [Table C].[id] IN (SELECT id FROM @ids);
DELETE FROM [Table D] WHERE [Table D].[id] IN (SELECT id FROM @ids);
根據您的編輯,“跟蹤器列的資料將提供目標表名稱”,您必須執行以下操作(只是提示,尚未檢查所有語法):
DECLARE @query NVARCHAR(MAX)
SET @query = '' --put the entire query here (all the declarations, and run)
EXEC(@query)
這樣做很危險
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/381070.html
標籤:sql sql-server 查询语句 存储过程
上一篇:SQL訪問子表資料
