我有一个查询,可以使用给定的“关键字”搜索来查找我所有数据库中的所有表:
CREATE TABLE #tblTEMP1
(
DBaseName VARCHAR(100),
TableSchema VARCHAR(50),
TableName VARCHAR(100),
ColumnName VARCHAR(100),
DataType VARCHAR(100),
CharMaxLength VARCHAR(100)
)
EXEC sp_MSForEachDB @command1 = 'USE [?];
INSERT INTO #tblTEMP1
SELECT
Table_Catalog, Table_Schema, Table_Name,
Column_Name, Data_Type, Character_Maximum_Length
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME like ''%password%'''
SELECT * FROM #tblTEMP1
DROP TABLE #tblTEMP1
如何利用上面的查询实际更改/ UPDATE
返回的列?是的,我正在尝试使用单个值来标准化每个“用户”表的密码列。
答案 0 :(得分:1)
如果我对您的理解正确,那么下一种方法可能会有所帮助。它基于您的声明,使用sp_MSForEachDB
未记录的过程。不需要临时表,只需生成并执行动态语句即可。
EXEC sp_MSForEachDB @command1 = '
IF ''?'' NOT IN (''master'', ''model'', ''msdb'', ''tempdb'') BEGIN
USE [?];
DECLARE @stm nvarchar(max)
SET @stm = N''''
SELECT @stm = CONCAT(
@stm,
N''UPDATE '',
QUOTENAME(TABLE_SCHEMA),
N''.'',
QUOTENAME(TABLE_NAME),
N'' SET '',
QUOTENAME(COLUMN_NAME),
N'' = ''''your_varchar_value''''; ''
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE ''password%''
PRINT @stm
EXEC (@stm)
END
'
答案 1 :(得分:0)
使用sys.databases
获取所有数据库的列表。
GO
select * into #dbname from (SELECT * FROM sys.databases) as db
select * from #dbname
GO
然后,您可以使用cursor
遍历每个数据库并完成任务。