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

Sql server 从其他表中的值创建SQL Server选择/删除查询,sql-server,sql-server-2012,delete-row,dynamicquery,Sql Server,Sql Server 2012,Delete Row,Dynamicquery,我有一个名为master\u table的主表,主表中的列和值如下: | ID | Database | Schema | Table_name | Common_col | Value_ID | +-------+------------+--------+-------------+------------+----------+ | 1 | Database_1 | Test1 | Test_Table1 | Test_ID | 1 | | 2

我有一个名为
master\u 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\u表
,其中包含需要删除的值

| Value_ID | Common_col | Value  | 
+----------+------------+--------+
|   1      | Test_ID    | 110    | 
|   1      | Test_ID    | 111    |
|   1      | Test_ID    | 115    |
|   2      | Test_ID2   | 999    |
我需要构建一个查询来创建一个SQL查询,从
Master\u table
中提供的表中删除值,该表的数据库和模式信息在同一行中提供。我需要参考删除记录的列在主表的
Common\u col
列中,我需要选择的值在
value\u表的
value
列中

我的查询结果应创建如下所示的查询:

从数据库_1.Test1.Test_Table1中删除,其中Test_ID=110; 或

从数据库_1.Test1.Test_Table1中删除Test_ID(110111115)


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

查询实际上不会创建查询

一种方法是使用SSM生成查询语句,然后将它们复制到剪贴板,粘贴到窗口中,然后在那里执行,如果这是一次性的或非常偶然的事情,这种方法可能会很有用

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,所以我不打算把它放在我的答案中。

考虑到OP使用的是三部分命名,这就推断出SQL Server。我使用的是SQL Server。删除了mysql标签。很抱歉造成混淆。我同意,以及为什么我没有编辑标记@DaleK。我无法将列名硬编码到查询中。列名将由客户端插入,并将根据客户端的不同而更改。所以我需要一个动态查询来生成delete查询。