環境與版本

作業系統: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!!
USE [ailib]					--使用的資料庫,不同資料庫需修改
GO
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!!
USE [ailib]					--使用的資料庫,不同資料庫需修改
GO
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;--回傳字串


發佈留言