我希望删除所选表格中值=。
的所有行这将为我提供我需要查看的所有表格
SELECT t.name AS table_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name = 'CampusID'
ORDER BY table_name
但现在我试图在每个表中搜索CampusID中的值并删除该行。
感谢您的帮助。
答案 0 :(得分:0)
您可以使用动态SQL生成语句
SELECT
'delete from ' + t.name + ' where CampusId = ' + cast(123 as varchar(8))
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name = 'FundID'
ORDER BY t.name
根据您的价值使用适当的铸造。然后你可以把所有这些语句一起执行(在一个事务中)或者一个接一个地执行它们。
如果您想通过脚本执行 all ,可以使用此答案How to concat many rows into one string in SQL Server 2008?将结果合并为一个字符串,然后使用sp_executesql执行生成的脚本
答案 1 :(得分:0)
您可以连接要运行的代码,例如:
SELECT 'DELETE FROM ' + QUOTENAME(t.name) +
' WHERE ''CampusID'' = YourValue;' AS table_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name = 'CampusID'
ORDER BY table_name;
然后复制粘贴结果并运行它
答案 2 :(得分:0)
快速把它扔到一起。在此,您将遍历所有表/列并使用动态sql删除需要转换的值。我使用这样的查询来做你想做的事。我没有测试这个实际查询,因此您必须根据需要进行测试。
DECLARE @loopCount INT
DECLARE @tableName NVARCHAR(128)
DECLARE @columnName NVARCHAR(128)
DECLARE @strSQL NVARCHAR(MAX);
CREATE TABLE #tempTable (id INT IDENTITY(1,1), tableName VARCHAR(128), tableCol VARCHAR(128)
INSERT INTO #tempTable(tableName, tableCol)
SELECT t.name AS table_name, c.name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name = 'CampusID'
--Set a loopCount for while loop
SET @loopCount = 1
--Use the while loop to to loop through tables
while ( exists(SELECT id FROM #tempTable WHERE id = @loopCount) )
BEGIN
--Get current record in temp table
SELECT @tableName = t.tableName
@columnName = t.tableCol
FROM #tempTable t
WHERE t.id = @loopCount
-----------------------------------------------------------
SET @strSQL = 'DELETE FROM ' + @tableName + ' WHERE ' + @columnName + ' = ' + CONVERT(NVARCHAR(MAX), VALUEHERE)
EXEC sp_executesql @strSQL, N'@tableName varchar(128), @columnName varchar(128)', @tableName = @tableName, @columnName = @columnName
DELETE FROM #tempTable WHERE id = @loopCount
SET @loopCount = @loopCount + 1
END
DROP TABLE #temptable
答案 3 :(得分:0)
以下是使用动态sql完成此任务的完整工作示例。
declare @SQL nvarchar(max) = N''
, @ValueToDelete nvarchar(25) = N'Some Value'
SELECT @SQL = @SQL + N'DELETE FROM ' + QUOTENAME(t.name) +
N' WHERE CampusID = ''' + @ValueToDelete + N''';'
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name = 'CampusID'
exec sp_executesql @SQL