環境與版本

作業系統:Window10 64x 版本:2004

資料庫產品版本:Microsoft SQL Server Developer (64-bit) v18.4

資料庫版本編號:15.0.2070.41

查看資料庫內的條件約束Constraint

可以查看整個資料庫內用到的Constranint 名稱,或是加上條件抓取特定資料表的Constraint。

-- =============================================
-- Author:		Steven玄
-- ALTER date:  20201028
-- Description:	查看 資料庫的 條件Constraint  
-- =============================================

SELECT 
	dense_rank() over(order by A.[crdate],A.[refdate],A.[id] asc) as [rk]
	,A.[name] AS [Constraint_name]   
    ,A.[id]
    ,A.[type]  
    ,A.[crdate]  
    ,A.[refdate]  
	,B.[id] as [OBJECT_ID]
FROM sysobjects AS A INNER JOIN syscolumns AS B  --sysobjects
ON A.[id] = B.[cdefault]
where A.[type] ='D'			--條件Constraint  
--AND B.[id] = OBJECT_ID('TableName') --縮小搜尋範圍資料表名稱 

大量刪除約束條件Constraint 範本 的 SQL程式碼範本

需要依照需求調整一個地方 1.設定要更動的資料表表的名稱 和2.設定相關條件

--!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!!!小心使用!!
-- =============================================
-- Author:		Steven玄
-- ALTER date:  20201028
-- Description:	產生 大量刪除 條件Constraint  的字串   (通常自串會很長)
-- =============================================
--!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!!!Watch out!!

-- 創暫存TABLE
DECLARE @Constraint_TABLE TABLE  (
[rk] [int] NOT NULL,					--順序
[Constraint_name] [nvarchar](50) NULL,	--預存程序名稱
[id] [nvarchar](20) NULL,			--Constraint ID
[type] [nvarchar](50) NULL,			--項目類別
[crdate] [DATETIME] NULL,			--創建時間
[refdate] [DATETIME] NULL,			--修改時間
[OBJECT_ID][nvarchar](20) NULL		--物件ID
);

DECLARE @Table VARCHAR(20) = 'TAD_201' --設定要更動的資料表表的名稱


--下條件把多餘的預存程序放進去這個taBLE
INSERT INTO @Constraint_TABLE
--可先查看 
SELECT 
	dense_rank() over(order by A.[crdate],A.[refdate],A.[id] asc) as [rk]
	,A.[name] AS [Constraint_name]   
    ,A.[id]
    ,A.[type]  
    ,A.[crdate]  
    ,A.[refdate]  
	,B.[id] as [OBJECT_ID]
FROM sysobjects AS A INNER JOIN syscolumns AS B  --sysobjects
ON A.[id] = B.[cdefault]
where A.[type] ='D'			--條件Constraint  
AND B.[id] = OBJECT_ID(@Table)   --表的名稱
--設定相關條件
AND A.[name] like 'DF_TAD%'	  --Constraint 名稱




--組DROP預存程序字串
DECLARE @MAX   BIGINT;
DECLARE @Min   BIGINT;
SELECT @MAX = MAX([rk]),@Min=MIN([rk]) FROM @Constraint_TABLE

declare @string nvarchar(max)		--字串
SET  @string = 'ALTER TABLE ['+@Table+'] DROP CONSTRAINT '

DECLARE @Constraint_name nvarchar(100) --預存程序名稱
WHILE(@Min <= @MAX)
BEGIN
SELECT @Constraint_name = [Constraint_name] FROM @Constraint_TABLE  WHERE [rk] = @Min
SET @string += ' ['+@Constraint_name+'] ';
	 if @Min=@MAX SET @string += ''
	 ELSE SET @string += ',';
SET @Min=@Min+1
END

SELECT @string;--回傳字串


Steven玄

謝謝您觀看本站內容!! 😅 西元93年台灣男,軟體前、後、資料庫工程師 和 多元收入實踐,程式設計、網站系統規劃、商業策略分析規劃、多元收入研究,目前在網站開發公司擔任工程師。

發佈留言