2011-12-20 4 views
0

데이터베이스를 프로그래밍 방식으로 정리하기 위해 하나의 작은 저장 프로 시저를 작성하려고합니다. 이를 위해 저장 프로 시저의 구문 오류

,

먼저, 내가 포기하고 모든 외부 키 제약

둘째, 내가 포기하고 모든 기본 키 제약,

셋째, 모든 테이블을 삭제합니다.

나는 (세 번째 단계는 아직 시작되지 않음) 세 위의 단계를 수행하려면 다음과 같은 코드를 작성했습니다

CREATE PROCEDURE usp_CleanupDB AS 
BEGIN 
--Begin: Code to drop FOREIGN KEY CONSTRAINTS in the database 
DECLARE @ForeignKeyConstraint AS VARCHAR(100) 
DECLARE @ForeignKeyContainedTableName AS VARCHAR(100) 
DECLARE @ForeignKeyConstraintsTableCursor AS CURSOR 
SET @ForeignKeyConstraintsTableCursor = CURSOR FOR 
SELECT ForeignKeyName, TableName FROM dbo.GetDBForeignKeyConstraints() 
OPEN @ForeignKeyConstraintsTableCursor 
FETCH NEXT FROM @ForeignKeyConstraintsTableCursor INTO @ForeignKeyConstraint, @ForeignKeyContainedTableName 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    --Drop FOREIGN KEY Constraint 
    ALTER TABLE @ForeignKeyContainedTableName DROP CONSTRAINT @ForeignKeyConstraint 
    FETCH NEXT FROM @ForeignKeyConstraintsTableCursor into @ForeignKeyConstraint, @ForeignKeyContainedTableName 
END 
CLOSE @ForeignKeyConstraintsTableCursor 
DEALLOCATE @ForeignKeyConstraintsTableCursor 
--End: Code to drop FOREIGN KEY CONSTRAINTS in the database 
--Begin: Code to drop PRIMARY KEY CONSTRAINTS in the database 
DECLARE @PrimaryKeyConstraint AS VARCHAR(100) 
DECLARE @PrimaryKeyContainedTableName AS VARCHAR(100) 
DECLARE @PrimaryKeyConstraintsTableCursor AS CURSOR 
SET @PrimaryKeyConstraintsTableCursor = CURSOR FOR 
SELECT PrimaryKeyName, TableName FROM dbo.GetDBPrimaryKeyConstraints() 
OPEN @PrimaryKeyConstraintsTableCursor 
FETCH NEXT FROM @PrimaryKeyConstraintsTableCursor INTO @PrimaryKeyConstraint, @PrimaryKeyContainedTableName 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    --Drop PRIMARY KEY Constraint 
    ALTER TABLE @PrimaryKeyContainedTableName DROP CONSTRAINT @PrimaryKeyConstraint 
    FETCH NEXT FROM @PrimaryKeyConstraintsTableCursor INTO @PrimaryKeyConstraint, @PrimaryKeyContainedTableName 
END 
--End: Code to drop PRIMARY KEY CONSTRAINTS in the database 
END 

나는 다음과 같은 오류가 점점 오전 :

Msg 102, Level 15, State 1, Procedure usp_CleanupDB, Line 15 
Incorrect syntax near '@ForeignKeyContainedTableName'. 
Msg 102, Level 15, State 1, Procedure usp_CleanupDB, Line 33 
Incorrect syntax near '@PrimaryKeyContainedTableName'. 

수 누군가하시기 바랍니다 문제를 해결하는 방법을 알려주시겠습니까?

답변

1

아래의 방법을 사용하고 각 변수를 모든 곳에서 사용할 수 있도록 상단에 변수를 선언하십시오.

EXECUTE('ALTER TABLE ' + @PrimaryKeyContainedTableName + ' DROP CONSTRAINT '+ @PrimaryKeyConstraint) 
2

ALTER TABLE과 같은 DDL 명령에서 개체 이름에 변수를 사용할 수 없습니다.