抛出此在一起快。在这里,你将遍历所有的表/列,并使用动态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
当然不需要临时表和循环这里。但是,张贴这不起作用。 #tempTable中没有名为id的列。 –
我编辑并添加了列名。我给用户另外一个例子来复制和粘贴脚本。如果他有其他可变列进行清理,他可以将其用作存储过程或其他东西。 – manderson
即使作为存储过程,也不需要循环。 :) –