以上就是我的情景。我想知道是否可以通过单一查询来使用MySQL。
答案 0 :(得分:0)
您不知道具有Client_ID字段的表的名称,可以使用信息模式找到它们并将其存储在临时表中。 然后,应在循环中生成动态查询以删除所需的记录。这样的事情。
答案 1 :(得分:0)
不,这不能在单个SQL语句中完成。
您需要SELECT
表中的单独information_schema.columns
语句来标识包含具有特定名称的列的表,例如
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'Client_ID'
AND table_schema = 'mydatabase'
您可以使用SELECT
的结果动态生成所需的DELETE
语句。但是需要在DELETE语句中将表的名称指定为标识符。
答案 2 :(得分:0)
下面的代码可以完成这项工作。
DECLARE @T AS TABLE (ID INT PRIMARY KEY IDENTITY,STRSQL VARCHAR(8000))
INSERT INTO @T(STRSQL)
SELECT DISTINCT 'DELETE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] WHERE CLIENT_ID=123'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'CLIENT_ID'
DECLARE @ID INT, @STRSQL VARCHAR(8000)
WHILE ((SELECT COUNT(*) FROM @T)>0)
BEGIN
SELECT TOP 1
@ID = ID,
@STRSQL=STRSQL
FROM @T
EXEC (@STRSQL)
DELETE @T WHERE ID =@ID
END