![](/img/trans.png)
[英]Find all tables containing column with specified name - MS SQL Server
[英]Find all tables with specified column name and set values to NULL
我知道如何在數據庫中查找具有指定列名的所有表:
SELECT TABLE_NAME
, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%Name%'
結果,我得到一個帶有TABLE_NAME
和COLUMN_NAME
的表。 是否可以將查詢接收的列中的所有值都設置為NULL?
sp_MSforeachtable
廣泛使用。 它遍歷每個表並執行指定的語句。 [?]
是表名的替身。 請先備份數據庫,然后再嘗試此操作。
EXEC sp_MSforeachtable 'UPDATE [?] SET SomeColumn = NULL'
使用Dynamic Sql
。 嘗試這個。
DECLARE @sql NVARCHAR(max)=''
SELECT @sql += 'update ' + TABLE_NAME + ' set ' + COLUMN_NAME + '= NULL '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%Name%'
--print @sql
EXEC Sp_executesql @sql
您不能在查詢中定義每個表和每個列。 為此,您需要動態選擇表和列並執行它。 您可以動態使用游標
DECLARE @TableName VARCHAR(100)=''
DECLARE @ColumnName VARCHAR(100)
DECLARE @PreviousTableName VARCHAR(100)=''
DECLARE @PreviousColumnName NVARCHAR(MAX)=''
DECLARE @ROWNO INT
DECLARE @MAXCOUNT INT
DECLARE @UPDATESQL NVARCHAR(MAX)
DECLARE @COLSSQL NVARCHAR(MAX)
-- Here you declare which all columns you need to loop in Cursor
DECLARE CUR CURSOR FOR
SELECT TABLE_NAME, COLUMN_NAME
-- Find Row number for each table
,ROW_NUMBER() OVER(PARTITION BY TABLE_NAME ORDER BY COLUMN_NAME) RNO,
-- Gets the count of columns in each table
COUNT(COLUMN_NAME) OVER(PARTITION BY TABLE_NAME) CNT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME LIKE '%TE%'
ORDER BY TABLE_NAME, COLUMN_NAME
OPEN CUR
FETCH NEXT FROM CUR
INTO @TableName,@ColumnName,@ROWNO,@MAXCOUNT
WHILE @@FETCH_STATUS = 0
BEGIN
SET @PreviousColumnName = @PreviousColumnName + @ColumnName + '=NULL,'
-- If current row is last record of the table in the loop
IF(@ROWNO = @MAXCOUNT)
BEGIN
SET @UPDATESQL = 'UPDATE '+@TableName+' SET ' + @PreviousColumnName
SET @UPDATESQL = LEFT(@UPDATESQL, LEN(@UPDATESQL) - 1)
EXEC SP_EXECUTESQL @UPDATESQL
SET @PreviousColumnName = ''
END
-- Fetches next record and increments the loop
FETCH NEXT FROM CUR
INTO @TableName,@ColumnName,@ROWNO,@MAXCOUNT
END
CLOSE CUR;
DEALLOCATE CUR;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.