从其他表中的值创建 SQL Server 选择/删除查询



我有一个名为Master_Table的主表,主表中的列和值如下:

|   ID  |   Database | Schema | Table_name  | Common_col | Value_ID |
+-------+------------+--------+-------------+------------+----------+
|   1   | Database_1 | Test1  | Test_Table1 | Test_ID    |  1       |
|   2   | Database_2 | Test2  | Test_Table2 | Test_ID    |  1       | 
|   3   | Database_3 | Test3  | Test_Table3 | Test_ID2   |  2       |

我还有另一个Value_Table,其中包含需要删除的值。

| Value_ID | Common_col | Value  | 
+----------+------------+--------+
|   1      | Test_ID    | 110    | 
|   1      | Test_ID    | 111    |
|   1      | Test_ID    | 115    |
|   2      | Test_ID2   | 999    |

我需要构建一个查询来创建 SQL 查询,以从Master_Table中提供的表中删除值,该表的数据库和架构信息在同一行中提供。我需要引用删除记录的列在主表的Common_col列中给出,我需要选择的值在Value_TableValue列中。

我的查询结果应该创建一个查询,如下所示:

从 Database_1.Test1.Test_Table1 中删除,其中 Test_ID=110; 或

从 Database_1.Test1.Test_Table1 中删除,其中Test_ID (110,111,115(;

这些查询应该在一个循环中,以便我可以从主表中提供的所有数据库和表中删除所有行。

查询不会真正创建查询。

执行所说的操作的一种方法(如果这是一次性操作或非常偶然的操作(是使用 SSMS 生成查询语句,然后将其复制到剪贴板,将它们粘贴到窗口中,然后在那里执行。

SELECT 'DELETE FROM Database_1.Test1.Test_Table1 WHERE ' 
+ common_col
+ ' = ' 
+ convert(VARCHAR(10),value)

这可能不是你想要的;听起来更像是你想要自动清理或其他什么。

如果您不介意重复一下,您可以将其变成一个大查询:

DELETE T1
FROM Database_1.Test1.Test_Table1 T1
INNER JOIN Database_1.Test1.ValueTable VT ON
(VT.common_col = 'Test_ID' and T1.Test_ID=VT.Value) OR
(VT.common_col = 'Test_ID2' and T1.Test_ID2=VT.Value)

您还可以将动态SQL与第一部分结合使用...但我讨厌动态SQL,所以我不会把它放在我的答案中。

最新更新