2013-01-19 3 views
5

제약 조건 이름을 지정하지 않고 스크립트로 내 테이블에 몇 가지 제약 조건을 만들었습니다. 결과적으로, 예를 들어 FK__DOC_OBGS___kntr___54E63309과 같은 제약 조건을 갖게되었습니다.SQL에서 자동으로 제한된 제약 조건을 제거합니다.

정확한 제약 이름을 지정하지 않고 해당 제약 조건을 삭제할 수 있습니까?

예를 들어,이 같은 문제는 우리가이 테이블에 데이터베이스를 많이 가지고있다

ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT LIKE 'FK__DOC_OBGS___kntr%' 

(작동하지 않는)와 나는 테이블에서 모든 제약 조건을 제거해야하지만, 분명히 이름은 각 테이블마다 다릅니다.

+1

이것은 제약 ** 항상 ** 명시 적으로 따라 지정해야하는 이유에 대한 또 다른 좋은 인수입니다 :

그러나 드롭 제약 명령에 대해 다음과 같이 SQL을 구축 쉽게 INFORMATION_SCHEMA 뷰를 사용하고 있습니다 원하는 이름 지정 규칙을 사용하십시오 ... –

+1

예, 사람들은 실수로 배울 수 있습니다 :)) –

답변

2
DECLARE @sql1 NVARCHAR(MAX); 
SELECT @sql1 = c 
FROM 
(
    SELECT 'ALTER TABLE DOC_INVS_1 DROP CONSTRAINT ' + CONSTRAINT_NAME + '; ' 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'DOC_INVS_1' 
    and CONSTRAINT_NAME LIKE 'FK__DOC_INVS___kntr%' 
) T(c); 

EXEC(@sql1); 
4

SQL의 DDL 명령은 like 연산자와 협조하지 않습니다.

SELECT 'ALTER TABLE DOC_OBGS_10 DROP CONSTRAINT ' + CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
WHERE CONSTRAINT_NAME LIKE 'FK__DOC_OBGS___kntr%' 
+0

고마워요. 내가 당신의 아이디어를 사용하고 내 경우에 대한이 솔루션과 함께 : : SELECT '변경 테이블 DOC_INVS_1 DROP CONSTRAINT'+ CONSTRAINT_NAME 여기서 INFORMATION_SCHEMA.TABLE_CONSTRAINTS 어디에서 TABLE_NAME = 'DOC_INVS_1' 및 CONSTRAINT_NAME LIKE 'FK__DOC_INVS ___ kntr %'문제는, 어떻게 스크립트에 의해 반환 된 쿼리를 늘리십시오? 나는 Exec을 사용해 보았지만, 나는 대괄호 나 다른 것을 포함 시켜야만한다고 생각한다. 죄송합니다, 나는 SQL을 가진 초보자입니다 –

+0

어떤 DBMS를 사용합니까? MS-SQL? – pkmiec

+0

예, Microsoft SQL –

관련 문제