且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

SQL Server 数据库所有表增加同一列

更新时间:2022-09-28 16:15:37

SET @COLUMN_NAME = 'ColumnNameYouWantToAdd';
SET @COLUMN_DATATYPE = 'DataTypeOfColumn';

------------------------------------------------Code---------------------------------------------------
USE TESTDB;
GO
--Declare Variables
DECLARE @TableName VARCHAR(100);
DECLARE @TableSchema VARCHAR(100);
DECLARE @COLUMN_NAME VARCHAR(50);
SET @COLUMN_NAME = 'CreatedOn'; -- Change Column Name according to your requirement
DECLARE @COLUMN_DATATYPE VARCHAR(50);
SET @COLUMN_DATATYPE = 'DateTime'; -- Provide data type for column

--Declare Cursor
DECLARE CUR CURSOR FOR
SELECT TABLE_SCHEMA,
       TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
--OPEN CURSOR
OPEN CUR;
--Fetch First Row
FETCH NEXT FROM CUR
INTO @TableSchema,
     @TableName;
--Loop
WHILE @@FETCH_STATUS = 0
BEGIN

    DECLARE @SQL NVARCHAR(MAX);
    SET @SQL = NULL;
    IF NOT EXISTS
    (
        SELECT 1
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = @TableName
              AND COLUMN_NAME = @COLUMN_NAME
              AND TABLE_SCHEMA = @TableSchema
    )
    BEGIN
        SET @SQL = 'ALTER TABLE ' + @TableSchema + '.' + @TableName + ' ADD ' + @COLUMN_NAME + ' ' + @COLUMN_DATATYPE + ' ';
        PRINT @SQL;
        EXEC (@SQL);
    END;

    IF EXISTS
    (
        SELECT 1
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_NAME = @TableName
              AND COLUMN_NAME = @COLUMN_NAME
              AND TABLE_SCHEMA = @TableSchema
    )
    BEGIN
        PRINT 'Column Already exists in Table';
    END;
    FETCH NEXT FROM CUR
    INTO @TableSchema,
         @TableName;
END;
--Close and Deallocate Cursor
CLOSE CUR;
DEALLOCATE CUR;