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查询。