728x90
DECLARE @QUERY NVARCHAR(MAX)
,@TABLENAME NVARCHAR(MAX)
,@FOREIGNKEYNAME NVARCHAR(MAX)
,@KEYTYPE NVARCHAR(MAX)
DECLARE FOREIGNKEY_CURSOR CURSOR
FOR
/*****[외래키 걸린것만 삭제 할때 ]**************************************************/
SELECT FKN.CONSTRAINT_NAME AS FK_Name
,FKT.TABLE_NAME AS FK_Table
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS FKN
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FKT
ON FKN.CONSTRAINT_NAME = FKT.CONSTRAINT_NAME
WHERE FKT.TABLE_NAME NOT LIKE 'BD_%'
ORDER BY FKT.TABLE_NAME, FKN.constraint_name
/***********************************************************************************/
SELECT CONSTRAINT_NAME,TABLE_NAME,CONSTRAINT_TYPE
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME NOT LIKE 'BD_%'
ORDER BY TABLE_NAME, constraint_name
OPEN FOREIGNKEY_CURSOR
FETCH NEXT FROM FOREIGNKEY_CURSOR
INTO @FOREIGNKEYNAME, @TABLENAME,@KEYTYPE
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
IF @KEYTYPE='FOREIGN KEY'
BEGIN
/*****[외래키 해제]*****************************************************************/
SET @QUERY = 'ALTER TABLE ['+ @TABLENAME + '] NOCHECK CONSTRAINT ['+ @FOREIGNKEYNAME + ']'
EXECUTE(@QUERY);
PRINT 'QUERY 1 - ' + @QUERY
/***********************************************************************************/
/*****[데이터 삭제]*****************************************************************/
SET @QUERY = 'DELETE FROM '+@TABLENAME
EXECUTE(@QUERY);
PRINT 'QUERY 2 - ' + @QUERY
/***********************************************************************************/
/*****[외래키 설정]*****************************************************************/
SET @QUERY = 'ALTER TABLE [' + @TABLENAME + '] CHECK CONSTRAINT [' + @FOREIGNKEYNAME + ']'
EXECUTE(@QUERY);
PRINT 'QUERY 3 - ' + @QUERY
/***********************************************************************************/
END
ELSE
BEGIN
/*****[데이터 삭제]*****************************************************************/
SET @QUERY = 'DELETE FROM '+@TABLENAME
EXECUTE(@QUERY);
PRINT 'QUERY 4 - ' + @QUERY
/***********************************************************************************/
END
FETCH NEXT FROM FOREIGNKEY_CURSOR
INTO @FOREIGNKEYNAME, @TABLENAME,@KEYTYPE
END
CLOSE FOREIGNKEY_CURSOR
DEALLOCATE FOREIGNKEY_CURSOR
728x90
'DBMS > MSSQL' 카테고리의 다른 글
[MSSQL] MS SQL 로그인 계정 생성 (0) | 2022.08.10 |
---|---|
[MSSQL] mssql 누락된 인덱스 (0) | 2022.08.09 |
[MSSQL] MSSQL 버전 확인 (0) | 2022.08.05 |
[MSSQL] Database Mirroring 구축 (0) | 2022.08.05 |
[MSSQL] 권장 메모리 설정 (0) | 2022.08.05 |