我有一个名为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_Table
Value
列中。
我的查询结果应该创建一个查询,如下所示:
从 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,所以我不会把它放在我的答案中。