[SQL] SQL 스크립트 DELETE CASCADE ON 추가하는 모든 외부 키를 변경하려면
SQLSQL 스크립트 DELETE CASCADE ON 추가하는 모든 외부 키를 변경하려면
나는 약 250 테이블과 SQL 2005 데이터베이스가 있습니다.
나는 일시적 그래서 대량 쉽게 제거 할 수있는 외부 키의 모든 DELETE CASCADE ON 사용하려는.
나는 모든 외래 키에 DELETE CASCADE ON 해제합니다.
나는이 일을 알고있는 유일한 방법은, 다음 몇 가지 더 검색 할 수 및 추가 교체, 스크립트 저장, 모든하지만 외부 키를 제거하기 위해서, 전체 데이터베이스 스크립트를 생성 생성 Management Studio를 사용하여 검색의 일종을하고 교체하는 것입니다 를 ON DELETE CASCADE.
그럼, 스크립트를 실행 내 삭제를 수행 한 후 다른 스크립트를 실행합니다.
이 스크립트를 생성하는 쉬운 방법이 있나요? 이 방법은 오류로 너무 경향이 보인다 나는 우리가 데이터베이스 나에 대한 모든 다른 변경과 날짜로 스크립트를 주기적으로 업데이트해야합니다 수동으로 내가 그것을 사용해야 할 수 있습니다 때마다 그것을 다시 생성합니다.
A가에 대한 시스템 테이블에서 선택 실행할 수있는 다른 옵션은 나를 위해 스크립트를 "생성"인가? 심지어 DELETE CASCADE ON 활성화하고 비활성화 시스템 테이블에 업데이트를 실행하는 것이 가능할 수 있을까?
해결법
-
==============================
1.여기에 비슷한 목적으로 사용되는 스크립트 I입니다. 그것은 (. 두 개 이상의 필드를 사용) 복합 외래 키를 지원하지 않습니다 그리고 그것은 상황에 작동하기 전에 아마 일부 조정을해야합니다. 편집 : 특히 올바르게 다중 열 외래 키를 처리하지 않습니다.
여기에 비슷한 목적으로 사용되는 스크립트 I입니다. 그것은 (. 두 개 이상의 필드를 사용) 복합 외래 키를 지원하지 않습니다 그리고 그것은 상황에 작동하기 전에 아마 일부 조정을해야합니다. 편집 : 특히 올바르게 다중 열 외래 키를 처리하지 않습니다.
select DropStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema + '].[' + ForeignKeys.ForeignTableName + '] DROP CONSTRAINT [' + ForeignKeys.ForeignKeyName + ']; ' , CreateStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema + '].[' + ForeignKeys.ForeignTableName + '] WITH CHECK ADD CONSTRAINT [' + ForeignKeys.ForeignKeyName + '] FOREIGN KEY([' + ForeignKeys.ForeignTableColumn + ']) REFERENCES [' + schema_name(sys.objects.schema_id) + '].[' + sys.objects.[name] + ']([' + sys.columns.[name] + ']) ON DELETE CASCADE; ' from sys.objects inner join sys.columns on (sys.columns.[object_id] = sys.objects.[object_id]) inner join ( select sys.foreign_keys.[name] as ForeignKeyName ,schema_name(sys.objects.schema_id) as ForeignTableSchema ,sys.objects.[name] as ForeignTableName ,sys.columns.[name] as ForeignTableColumn ,sys.foreign_keys.referenced_object_id as referenced_object_id ,sys.foreign_key_columns.referenced_column_id as referenced_column_id from sys.foreign_keys inner join sys.foreign_key_columns on (sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.[object_id]) inner join sys.objects on (sys.objects.[object_id] = sys.foreign_keys.parent_object_id) inner join sys.columns on (sys.columns.[object_id] = sys.objects.[object_id]) and (sys.columns.column_id = sys.foreign_key_columns.parent_column_id) ) ForeignKeys on (ForeignKeys.referenced_object_id = sys.objects.[object_id]) and (ForeignKeys.referenced_column_id = sys.columns.column_id) where (sys.objects.[type] = 'U') and (sys.objects.[name] not in ('sysdiagrams'))
-
==============================
2.위의 Andomar의 대답은 단일 열 외래 키 제약 조건 만 좋은하지만 작품이다. 나는 그것을 다중 열 제약 조건에 대한 약간의 적응 :
위의 Andomar의 대답은 단일 열 외래 키 제약 조건 만 좋은하지만 작품이다. 나는 그것을 다중 열 제약 조건에 대한 약간의 적응 :
create function dbo.fk_columns (@constraint_object_id int) returns varchar(255) as begin declare @r varchar(255) select @r = coalesce(@r + ',', '') + c.name from sys.foreign_key_columns fkc join sys.columns c on fkc.parent_object_id = c.object_id and fkc.parent_column_id = c.column_id where fkc.constraint_object_id = @constraint_object_id return @r end select distinct DropStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema + '].[' + ForeignKeys.ForeignTableName + '] DROP CONSTRAINT [' + ForeignKeys.ForeignKeyName + '] ' , CreateStmt = 'ALTER TABLE [' + ForeignKeys.ForeignTableSchema + '].[' + ForeignKeys.ForeignTableName + '] WITH CHECK ADD CONSTRAINT [' + ForeignKeys.ForeignKeyName + '] FOREIGN KEY(' + dbo.fk_columns(constraint_object_id) + ')' + 'REFERENCES [' + schema_name(sys.objects.schema_id) + '].[' + sys.objects.[name] + '] ' + ' ON DELETE CASCADE' from sys.objects inner join sys.columns on (sys.columns.[object_id] = sys.objects.[object_id]) inner join ( select sys.foreign_keys.[name] as ForeignKeyName ,schema_name(sys.objects.schema_id) as ForeignTableSchema ,sys.objects.[name] as ForeignTableName ,sys.columns.[name] as ForeignTableColumn ,sys.foreign_keys.referenced_object_id as referenced_object_id ,sys.foreign_key_columns.referenced_column_id as referenced_column_id ,sys.foreign_keys.object_id as constraint_object_id from sys.foreign_keys inner join sys.foreign_key_columns on (sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.[object_id]) inner join sys.objects on (sys.objects.[object_id] = sys.foreign_keys.parent_object_id) inner join sys.columns on (sys.columns.[object_id] = sys.objects.[object_id]) and (sys.columns.column_id = sys.foreign_key_columns.parent_column_id) -- Uncomment this if you want to include only FKs that already -- have a cascade constraint. -- where (delete_referential_action_desc = 'CASCADE' or update_referential_action_desc = 'CASCADE') ) ForeignKeys on (ForeignKeys.referenced_object_id = sys.objects.[object_id]) and (ForeignKeys.referenced_column_id = sys.columns.column_id) where (sys.objects.[type] = 'U') and (sys.objects.[name] not in ('sysdiagrams'))
또한 현재 그것을 가지고 FKS에서 DELETE CASCADE ON 도움말 제거하려면 쿼리를 사용할 수 있습니다.
이 아직은 열이 두 테이블에서 여러 가지 명명 된 사건을 처리하지 않습니다 - 다른 사용자 정의 함수는 정의 할 필요가있다.
-
==============================
3.더 많은 표준을 준수 솔루션 :
더 많은 표준을 준수 솔루션 :
;WITH CTE AS ( SELECT KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME ,KCU1.TABLE_SCHEMA AS FK_SCHEMA_NAME ,KCU1.TABLE_NAME AS FK_TABLE_NAME ,KCU1.COLUMN_NAME AS FK_COLUMN_NAME ,KCU1.ORDINAL_POSITION AS FK_ORDINAL_POSITION ,KCU2.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT_NAME ,KCU2.TABLE_SCHEMA AS REFERENCED_SCHEMA_NAME ,KCU2.TABLE_NAME AS REFERENCED_TABLE_NAME ,KCU2.COLUMN_NAME AS REFERENCED_COLUMN_NAME ,KCU2.ORDINAL_POSITION AS REFERENCED_ORDINAL_POSITION FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1 ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2 ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION ) SELECT FK_CONSTRAINT_NAME --,FK_SCHEMA_NAME --,FK_TABLE_NAME --,FK_COLUMN_NAME --,FK_ORDINAL_POSITION --,REFERENCED_CONSTRAINT_NAME --,REFERENCED_SCHEMA_NAME --,REFERENCED_TABLE_NAME --,REFERENCED_COLUMN_NAME --,REFERENCED_ORDINAL_POSITION , 'ALTER TABLE [' + FK_SCHEMA_NAME + ']' + '.[' + FK_TABLE_NAME + '] ' + 'DROP CONSTRAINT [' + FK_CONSTRAINT_NAME + ']; ' AS DropStmt , 'ALTER TABLE [' + FK_SCHEMA_NAME + ']' + '.[' + FK_TABLE_NAME + '] ' + + 'WITH CHECK ADD CONSTRAINT [' + FK_CONSTRAINT_NAME + '] ' + 'FOREIGN KEY([' + FK_COLUMN_NAME + ']) ' + 'REFERENCES [' + REFERENCED_SCHEMA_NAME + '].[' + REFERENCED_TABLE_NAME + ']([' + REFERENCED_COLUMN_NAME + ']) ON DELETE CASCADE; ' AS CreateStmt FROM CTE WHERE (1=1) /* AND FK_TABLE_NAME IN ( 'T_SYS_Geschossrechte' ,'T_SYS_Gebaeuderechte' ,'T_SYS_Standortrechte' ) AND REFERENCED_TABLE_NAME NOT LIKE 'T_AP_Ref_Mandant' */ ORDER BY FK_TABLE_NAME ,FK_CONSTRAINT_NAME ,FK_COLUMN_NAME ,FK_ORDINAL_POSITION ,REFERENCED_CONSTRAINT_NAME ,REFERENCED_TABLE_NAME ,REFERENCED_COLUMN_NAME ,REFERENCED_ORDINAL_POSITION
편집하다: 다중 열 외래 키의 확장 :
;WITH CTE AS ( SELECT KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME ,KCU1.TABLE_SCHEMA AS FK_SCHEMA_NAME ,KCU1.TABLE_NAME AS FK_TABLE_NAME ,KCU1.COLUMN_NAME AS FK_COLUMN_NAME ,KCU1.ORDINAL_POSITION AS FK_ORDINAL_POSITION ,KCU2.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT_NAME ,KCU2.TABLE_SCHEMA AS REFERENCED_SCHEMA_NAME ,KCU2.TABLE_NAME AS REFERENCED_TABLE_NAME ,KCU2.COLUMN_NAME AS REFERENCED_COLUMN_NAME ,KCU2.ORDINAL_POSITION AS REFERENCED_ORDINAL_POSITION FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1 ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2 ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION ) SELECT FK_SCHEMA_NAME ,FK_TABLE_NAME ,FK_CONSTRAINT_NAME --,FK_COLUMN_NAME --,REFERENCED_COLUMN_NAME , 'ALTER TABLE ' + QUOTENAME(FK_SCHEMA_NAME) + '.' + QUOTENAME(FK_TABLE_NAME) + ' ' + 'DROP CONSTRAINT ' + QUOTENAME(FK_CONSTRAINT_NAME) + '; ' AS DropStmt , 'ALTER TABLE ' + QUOTENAME(FK_SCHEMA_NAME) + '.' + QUOTENAME(FK_TABLE_NAME) + ' ADD CONSTRAINT ' + QUOTENAME(FK_CONSTRAINT_NAME) + ' FOREIGN KEY(' + SUBSTRING ( ( SELECT ', ' + QUOTENAME(FK.FK_COLUMN_NAME) AS [text()] FROM CTE AS FK WHERE FK.FK_CONSTRAINT_NAME = CTE.FK_CONSTRAINT_NAME AND FK.FK_SCHEMA_NAME = CTE.FK_SCHEMA_NAME AND FK.FK_TABLE_NAME = CTE.FK_TABLE_NAME ORDER BY FK.FK_ORDINAL_POSITION FOR XML PATH, TYPE ).value('.[1]', 'nvarchar(MAX)') ,3, 4000 ) + ') ' + ' REFERENCES ' + QUOTENAME(REFERENCED_SCHEMA_NAME) + '.' + QUOTENAME(REFERENCED_TABLE_NAME) + '(' + SUBSTRING ( ( SELECT ', ' + QUOTENAME(Referenced.REFERENCED_COLUMN_NAME) AS [text()] FROM CTE AS Referenced WHERE Referenced.FK_CONSTRAINT_NAME = CTE.FK_CONSTRAINT_NAME AND Referenced.REFERENCED_SCHEMA_NAME = CTE.REFERENCED_SCHEMA_NAME AND Referenced.REFERENCED_TABLE_NAME = CTE.REFERENCED_TABLE_NAME ORDER BY Referenced.REFERENCED_ORDINAL_POSITION FOR XML PATH, TYPE ).value('.[1]', 'nvarchar(MAX)') , 3, 4000 ) + ') ON DELETE CASCADE ; ' AS CreateStmt FROM CTE GROUP BY FK_SCHEMA_NAME ,FK_TABLE_NAME ,FK_CONSTRAINT_NAME ,REFERENCED_SCHEMA_NAME ,REFERENCED_TABLE_NAME
과 PostgreSQL에 대한 훨씬 간단 버전 :
;WITH CTE AS ( SELECT KCU1.CONSTRAINT_NAME AS FK_CONSTRAINT_NAME ,KCU1.TABLE_SCHEMA AS FK_SCHEMA_NAME ,KCU1.TABLE_NAME AS FK_TABLE_NAME ,KCU1.COLUMN_NAME AS FK_COLUMN_NAME ,KCU1.ORDINAL_POSITION AS FK_ORDINAL_POSITION ,KCU2.CONSTRAINT_NAME AS REFERENCED_CONSTRAINT_NAME ,KCU2.TABLE_SCHEMA AS REFERENCED_SCHEMA_NAME ,KCU2.TABLE_NAME AS REFERENCED_TABLE_NAME ,KCU2.COLUMN_NAME AS REFERENCED_COLUMN_NAME ,KCU2.ORDINAL_POSITION AS REFERENCED_ORDINAL_POSITION FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU1 ON KCU1.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG AND KCU1.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA AND KCU1.CONSTRAINT_NAME = RC.CONSTRAINT_NAME INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU2 ON KCU2.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG AND KCU2.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA AND KCU2.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME AND KCU2.ORDINAL_POSITION = KCU1.ORDINAL_POSITION ) SELECT FK_SCHEMA_NAME ,FK_TABLE_NAME ,FK_CONSTRAINT_NAME --,FK_COLUMN_NAME --,REFERENCED_COLUMN_NAME , 'ALTER TABLE ' || QUOTE_IDENT(FK_SCHEMA_NAME) || '.' || QUOTE_IDENT(FK_TABLE_NAME) || ' ' || 'DROP CONSTRAINT ' || QUOTE_IDENT(FK_CONSTRAINT_NAME) || '; ' AS DropStmt , 'ALTER TABLE ' || QUOTE_IDENT(FK_SCHEMA_NAME) || '.' || QUOTE_IDENT(FK_TABLE_NAME) || ' ADD CONSTRAINT ' || QUOTE_IDENT(FK_CONSTRAINT_NAME) || ' FOREIGN KEY(' || string_agg(FK_COLUMN_NAME, ', ') || ') ' || ' REFERENCES ' || QUOTE_IDENT(REFERENCED_SCHEMA_NAME) || '.' || QUOTE_IDENT(REFERENCED_TABLE_NAME) || '(' || string_agg(REFERENCED_COLUMN_NAME, ', ') || ') ON DELETE CASCADE ; ' AS CreateStmt FROM CTE GROUP BY FK_SCHEMA_NAME ,FK_TABLE_NAME ,FK_CONSTRAINT_NAME ,REFERENCED_SCHEMA_NAME ,REFERENCED_TABLE_NAME
-
==============================
4.당신은 테이블을 변경 FK 제약 조건을 삭제하고이를 다시해야합니다 :
당신은 테이블을 변경 FK 제약 조건을 삭제하고이를 다시해야합니다 :
이는 DB2 구문입니다. SQLServer에이 유사해야
ALTER TABLE emp DROP CONSTRAINT fk_dept; ALTER TABLE emp ADD CONSTRAINT fk_dept FOREIGN KEY(dept_no) REFERENCES dept(deptno) ON DELETE CASCADE;
당신은 모든 외부 키에 대한 시스템 테이블을 쿼리를 삭제하고 다시 작성하기 위해 자신의 SP를 작성할 수 있습니다. 당신은 당신이 FK defn이를 통해 루프, CASCADE를 포함하는 VARCHAR 및 APPEND / 편집에 넣어 다음 stmt를 실행할 수있는이 작업을 수행하기 위해 SP에서 동적 SQL을 사용해야합니다.
-
==============================
5.@Andomar의 대답은 나를 위해 일하지만 조금 설명서이었다 - 당신은 결과를 복사하여 실행 한 후, 그것을 실행해야합니다. 나는 나의 자동화 된 테스트 설정의 일부로 그래서 자동으로 하나 개의 쿼리에서 실행하는 데 필요에 따라이를 사용하는 데 필요한.
@Andomar의 대답은 나를 위해 일하지만 조금 설명서이었다 - 당신은 결과를 복사하여 실행 한 후, 그것을 실행해야합니다. 나는 나의 자동화 된 테스트 설정의 일부로 그래서 자동으로 하나 개의 쿼리에서 실행하는 데 필요에 따라이를 사용하는 데 필요한.
나는 외래 키 제약 조건을 수정하기 위해 실행하는 모든 SQL을 가져옵니다 다음에 올이 후 실제로 한 번에 모든 것을 실행합니다 :
IF Object_id('tempdb..#queriesForContraints') IS NOT NULL BEGIN DROP TABLE #queriesForContraints END DECLARE @ignoreTablesCommaSeparated VARCHAR(1000) SELECT 'ALTER TABLE [' + ForeignKeys.foreigntableschema + '].[' + ForeignKeys.foreigntablename + '] DROP CONSTRAINT [' + ForeignKeys.foreignkeyname + ']; ' + 'ALTER TABLE [' + ForeignKeys.foreigntableschema + '].[' + ForeignKeys.foreigntablename + '] WITH CHECK ADD CONSTRAINT [' + ForeignKeys.foreignkeyname + '] FOREIGN KEY([' + ForeignKeys.foreigntablecolumn + ']) REFERENCES [' + Schema_name(sys.objects.schema_id) + '].[' + sys.objects.[name] + ']([' + sys.columns.[name] + ']) ON DELETE CASCADE; ' AS query INTO #queriesForContraints FROM sys.objects INNER JOIN sys.columns ON ( sys.columns.[object_id] = sys.objects.[object_id] ) INNER JOIN (SELECT sys.foreign_keys.[name] AS ForeignKeyName, Schema_name(sys.objects.schema_id) AS ForeignTableSchema, sys.objects.[name] AS ForeignTableName, sys.columns.[name] AS ForeignTableColumn, sys.foreign_keys.referenced_object_id AS referenced_object_id, sys.foreign_key_columns.referenced_column_id AS referenced_column_id FROM sys.foreign_keys INNER JOIN sys.foreign_key_columns ON ( sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.[object_id] ) INNER JOIN sys.objects ON ( sys.objects.[object_id] = sys.foreign_keys.parent_object_id ) INNER JOIN sys.columns ON ( sys.columns.[object_id] = sys.objects.[object_id] ) AND ( sys.columns.column_id = sys.foreign_key_columns.parent_column_id )) ForeignKeys ON ( ForeignKeys.referenced_object_id = sys.objects.[object_id] ) AND ( ForeignKeys.referenced_column_id = sys.columns.column_id ) WHERE ( sys.objects.[type] = 'U' ) AND ( sys.objects.[name] NOT IN ( 'sysdiagrams' --add more comma separated table names here if required ) ) DECLARE @queryToRun NVARCHAR(MAX) SELECT @queryToRun = STUFF( (SELECT query + '' FROM #queriesForContraints FOR XML PATH ('')) , 1, 0, '') EXEC sp_executesql @statement = @queryToRun IF Object_id('tempdb..#queriesForContraints') IS NOT NULL BEGIN DROP TABLE #queriesForContraints END
-
==============================
6.유일한 매개 변수는 프로세스 테이블의 이름 인 새 저장 프로 시저를합니다. sys.foreign_keys 및 sys.foreign_key_columns 적절한 드롭을 구축하고 구문을 만들고, 단지 커서 일부 인쇄 (KISS)를 사용하는 동안이 절차에서는 루프가 필요합니다.
유일한 매개 변수는 프로세스 테이블의 이름 인 새 저장 프로 시저를합니다. sys.foreign_keys 및 sys.foreign_key_columns 적절한 드롭을 구축하고 구문을 만들고, 단지 커서 일부 인쇄 (KISS)를 사용하는 동안이 절차에서는 루프가 필요합니다.
구문이 프로 시저를 호출 :
EXEC sp_msforeachtable 'YourProcedureName ''?'''
그리고 각 테이블에 대해 실행됩니다. 가지고 출력을 실행하면 모든 작업이 완료된다.
-
==============================
7.내가 찾은 간단한 솔루션은 CASCADE에 모든 NO ACTION을 대체하기 위해 검색 기능을 사용하여 하나의 파일로 데이터베이스를 내보낼 데이터베이스를 삭제하고 편집 된 파일을 가져 오는 것입니다.
내가 찾은 간단한 솔루션은 CASCADE에 모든 NO ACTION을 대체하기 위해 검색 기능을 사용하여 하나의 파일로 데이터베이스를 내보낼 데이터베이스를 삭제하고 편집 된 파일을 가져 오는 것입니다.
수출과 수입 사이의 데이터베이스에 변경 정보가 손실됩니다.
from https://stackoverflow.com/questions/868620/sql-script-to-alter-all-foreign-keys-to-add-on-delete-cascade by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQLite는 문자열이 다른 문자열 쿼리가 포함 (0) | 2020.06.21 |
---|---|
[SQL] 무슨 뜻 "1 BY GROUP"SQL 절을합니까? (0) | 2020.06.21 |
[SQL] 날짜, 시간, DATETIME, 및 TIMESTAMP 유형 사이에 어떤 차이 (0) | 2020.06.21 |
[SQL] SQL 서버 계획 : 인덱스 스캔 / 인덱스 힘쓰라의 차이 (0) | 2020.06.21 |
[SQL] ROW_NUMBER를 사용하여 쿼리에서 @@ 행 개수를 얻기의 효율적인 방법 (0) | 2020.06.21 |