環境與版本
作業系統:Window10 64x 版本:2004
資料庫產品版本:SQL Server 2014 Express Edition (64-bit)
資料庫版本編號:12.0.2000.8
一般來說在MSSQL的GUI管理器(SSMS),刪除表格和預存程序都需要一個個刪,比較麻煩,所以如果是一次大量要刪除的情況下,靠程式碼比較快速。但是這個方式需要[欲保留的表格或預存程序名稱]具有一定規則性,才會方便調整條件而不去刪掉[欲保留的表格或預存程序名稱]。
大量刪除表格和預存程序的SQL程式碼範本,直接執行後會回傳一組[刪除字串],並不會接刪除。然後執行這組[刪除字串]即可以刪除大量表格。
大量刪除Table表格 的 SQL程式碼範本
需要依照需求調整兩個地方 1.使用的資料庫 和 2.設定相關條件
--!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!
-- =============================================
-- Author: Steven朱
-- ALTER date: 20201016
-- Description: 產生 大量刪除 表格table 的字串
-- =============================================
--!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 創暫存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
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 'AI_I%' ;
--組合DROP 表格的字串
DECLARE @MAX BIGINT;
DECLARE @Min BIGINT;
SELECT @MAX = MAX([rk]),@Min=MIN([rk]) FROM @table_name_TABLE
declare @string nvarchar(max) --字串
SET @string = 'DROP TABLE '
DECLARE @Table_name nvarchar(100) --預存程序名稱
WHILE(@Min <= @MAX)
BEGIN
SELECT @Table_name = [Table_name] FROM @table_name_TABLE WHERE [rk] = @Min
SET @string += ' ['+@Table_name+'] ';
if @Min=@MAX SET @string += ''
ELSE SET @string += ',';
SET @Min=@Min+1
END
SELECT @string;--回傳字串
大量刪除Stored procedure預存程序 的 SQL程式碼範本
需要依照需求調整兩個地方 1.使用的資料庫 和 2.設定相關條件
--!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!
-- =============================================
-- Author: Steven朱軒
-- ALTER date: 20201016
-- Description: 產生 大量刪除 預存程序 的字串
-- =============================================
--!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 創暫存TABLE
DECLARE @procedure_TABLE TABLE (
[rk] [int] NOT NULL, --順序
[procedure_name] [nvarchar](50) NULL, --預存程序名稱
[schema_name] [nvarchar](10) NULL, --資料庫結構名稱
[type_desc] [nvarchar](50) NULL, --項目類別
[create_date] [DATETIME] NULL, --創建時間
[modify_date] [DATETIME] NULL --修改時間
);
--下條件把多餘的預存程序放進去這個taBLE
INSERT INTO @procedure_TABLE
--可先查看
SELECT
dense_rank() over(order by [create_date],[modify_date],[object_id] asc) as [rk]
,[name] AS [procedure_name]
,SCHEMA_NAME(schema_id) AS [schema_name]
,[type_desc]
,[create_date]
,[modify_date]
FROM sys.procedures
--設定排除條件
where [name] not like '%USP_AILIB%' ;
--組DROP預存程序字串
DECLARE @MAX BIGINT;
DECLARE @Min BIGINT;
SELECT @MAX = MAX([rk]),@Min=MIN([rk]) FROM @procedure_TABLE
declare @string nvarchar(max) --字串
SET @string = 'DROP PROCEDURE '
DECLARE @procedure_name nvarchar(100) --預存程序名稱
WHILE(@Min <= @MAX)
BEGIN
SELECT @procedure_name = [procedure_name] FROM @procedure_TABLE WHERE [rk] = @Min
SET @string += ' ['+@procedure_name+'] ';
if @Min=@MAX SET @string += ''
ELSE SET @string += ',';
SET @Min=@Min+1
END
SELECT @string;--回傳字串
