環境與版本
作業系統:Window10 64x 版本:2004
資料庫產品版本:Microsoft SQL Server Developer (64-bit) v18.4
資料庫版本編號:15.0.2070.41
在處理大量資料庫的時候,有時候一支一支維運修改顯得過於緩慢,所以使用大量處理的範本,來快速進行修正。
產生大量修改Table新增欄位 的 執行語法範本
調整並設定二個地方
- 設定值
- 相關條件
詳細調整影響的已經寫在Code裡面了。
-- =============================================
-- Author: Steven玄
-- ALTER date: 20210126
-- Description: 產生大量修改Table新增欄位 的執行語法範本
-- =============================================
DECLARE @File VARCHAR(25);
DECLARE @Type VARCHAR(25);
DECLARE @NULL VARCHAR(25);
DECLARE @IS_DEFAULT VARCHAR(1);
DECLARE @DEFAULT VARCHAR(25);
---設定值
SET @File = 'FILE_NAME1' ; --欄位名
SET @Type = 'CHAR(10)' ; --型態名
SET @NULL = 'NOT NULL'; --null / NOT NULL
SET @IS_DEFAULT = 'Y'; --是否設定DEFAULT 預設值 Y/N
SET @DEFAULT = '('''')'; --預設值 若要空字串請設定 '('''')'
-- 創暫存TABLE
DECLARE @table_name_TABLE TABLE (
[rk] [int] NOT NULL, --順序
[Table_name] [nvarchar](50) NULL, --預存程序名稱
[schema_name] [nvarchar](10) NULL, --資料庫結構名稱
[type_desc] [nvarchar](50) NULL, --項目類別
[create_date] [DATETIME] NULL, --創建時間
[modify_date] [DATETIME] NULL --修改時間
);
-- 創暫存TABLE
DECLARE @TEMP TABLE (
[CODE] [nvarchar](MAX) NULL --預存程序名稱
);
--下條件把要抓取的TABL放進去這個暫存taBLE
INSERT INTO @table_name_TABLE
--可先查看
SELECT
dense_rank() over(order by [create_date],[modify_date],[object_id] asc) as [rk]
,[name] AS [Table_name]
,SCHEMA_NAME(schema_id) AS [schema_name]
,[type_desc]
,[create_date]
,[modify_date]
FROM sys.tables
--設定相關條件
where [name] like 'TABD' ;
-- 表格的字串
DECLARE @MAX BIGINT;
DECLARE @Min BIGINT;
SELECT @MAX = MAX([rk]),@Min=MIN([rk]) FROM @table_name_TABLE
DECLARE @Table_name nvarchar(100) --預存程序名稱
WHILE(@Min <= @MAX)
BEGIN
SELECT @Table_name = [Table_name] FROM @table_name_TABLE WHERE [rk] = @Min
IF @IS_DEFAULT <> 'Y'
INSERT INTO @TEMP SELECT 'ALTER TABLE ['+@Table_name+'] ADD ['+@File+'] '+@Type+' '+@NULL+' ;'
IF @IS_DEFAULT = 'Y'
INSERT INTO @TEMP SELECT 'ALTER TABLE ['+@Table_name+'] ADD ['+@File+'] '+@Type+' '+@NULL+' DEFAULT '+@DEFAULT+' ;'
SET @Min=@Min+1
END
SELECT * FROM @TEMP; --回傳可使用字串
執行後的產生結果像這樣。直接全部複製就可以執行了。
產生大量修改Table修改欄位 的 執行語法範本
調整並設定二個地方
- 設定值
- 相關條件
詳細調整影響的已經寫在Code裡面了。
-- =============================================
-- Author: Steven玄
-- ALTER date: 20210126
-- Description: 產生大量修改Table 修改欄位 的執行語法範本
-- =============================================
DECLARE @File VARCHAR(25);
DECLARE @Type VARCHAR(25);
DECLARE @NULL VARCHAR(25);
DECLARE @IS_DEFAULT VARCHAR(1);
DECLARE @DEFAULT VARCHAR(25);
---設定值
SET @File = 'FILE_NAME1' ; --欄位名
SET @Type = 'CHAR(30)' ; --型態名(長度)
SET @NULL = 'NULL'; --null / NOT NULL
-- 創暫存TABLE
DECLARE @table_name_TABLE TABLE (
[rk] [int] NOT NULL, --順序
[Table_name] [nvarchar](50) NULL, --預存程序名稱
[schema_name] [nvarchar](10) NULL, --資料庫結構名稱
[type_desc] [nvarchar](50) NULL, --項目類別
[create_date] [DATETIME] NULL, --創建時間
[modify_date] [DATETIME] NULL --修改時間
);
-- 創暫存TABLE
DECLARE @TEMP TABLE (
[CODE] [nvarchar](MAX) NULL --預存程序名稱
);
--下條件把要抓取的TABL放進去這個暫存taBLE
INSERT INTO @table_name_TABLE
--可先查看
SELECT
dense_rank() over(order by [create_date],[modify_date],[object_id] asc) as [rk]
,[name] AS [Table_name]
,SCHEMA_NAME(schema_id) AS [schema_name]
,[type_desc]
,[create_date]
,[modify_date]
FROM sys.tables
--設定相關條件
where [name] like 'TABD' ;
-- 表格的字串
DECLARE @MAX BIGINT;
DECLARE @Min BIGINT;
SELECT @MAX = MAX([rk]),@Min=MIN([rk]) FROM @table_name_TABLE
DECLARE @Table_name nvarchar(100) --預存程序名稱
WHILE(@Min <= @MAX)
BEGIN
SELECT @Table_name = [Table_name] FROM @table_name_TABLE WHERE [rk] = @Min
INSERT INTO @TEMP SELECT 'ALTER TABLE ['+@Table_name+'] ALTER COLUMN ['+@File+'] '+@Type+' '+@NULL+' ;'
SET @Min=@Min+1
END
SELECT * FROM @TEMP; --回傳可使用字串
產生大量修改Table刪除欄位 的 執行語法範本
調整並設定二個地方
- 設定值
- Table相關條件
詳細調整影響的已經寫在Code裡面了。
-- =============================================
-- Author: Steven玄
-- ALTER date: 20210126
-- Description: 產生大量修改Table 刪除欄位 的執行語法範本
-- =============================================
DECLARE @File VARCHAR(25);
DECLARE @Type VARCHAR(25);
DECLARE @NULL VARCHAR(25);
DECLARE @IS_DEFAULT VARCHAR(1);
DECLARE @DEFAULT VARCHAR(25);
---設定值
SET @File = 'FILE_NAME1' ; --欄位名
-- 創暫存TABLE
DECLARE @table_name_TABLE TABLE (
[rk] [int] NOT NULL, --順序
[Table_name] [nvarchar](50) NULL, --預存程序名稱
[schema_name] [nvarchar](10) NULL, --資料庫結構名稱
[type_desc] [nvarchar](50) NULL, --項目類別
[create_date] [DATETIME] NULL, --創建時間
[modify_date] [DATETIME] NULL --修改時間
);
-- 創暫存TABLE
DECLARE @TEMP TABLE (
[CODE] [nvarchar](MAX) NULL --預存程序名稱
);
--下條件把要抓取的TABL放進去這個暫存taBLE
INSERT INTO @table_name_TABLE
--可先查看
SELECT
dense_rank() over(order by [create_date],[modify_date],[object_id] asc) as [rk]
,[name] AS [Table_name]
,SCHEMA_NAME(schema_id) AS [schema_name]
,[type_desc]
,[create_date]
,[modify_date]
FROM sys.tables
--設定Table相關條件
where [name] like 'TABD' ;
-- 表格的字串
DECLARE @MAX BIGINT;
DECLARE @Min BIGINT;
SELECT @MAX = MAX([rk]),@Min=MIN([rk]) FROM @table_name_TABLE
DECLARE @Table_name nvarchar(100) --預存程序名稱
WHILE(@Min <= @MAX)
BEGIN
SELECT @Table_name = [Table_name] FROM @table_name_TABLE WHERE [rk] = @Min
INSERT INTO @TEMP SELECT 'ALTER TABLE ['+@Table_name+'] DROP COLUMN ['+@File+'] ;'
SET @Min=@Min+1
END
SELECT * FROM @TEMP; --回傳可使用字串
如遇到類似以下狀況,需要先刪除Constraint,可以參考[MSSQL] MS SQL Transact-SQL 大量刪除約束條件Constraint 範本

