2016-10-15 16 views
-1

私はこれで約2時間の間これを苦労しています。ストアドプロシージャを使用してテーブルへの列を作成しようとしています。それは、私はその列が存在するかどうかをチェックしなければならない、と私はそれを削除する必要があります。SQL Server:ドロップ制約がある場合

問題は、私が制約を削除することはできませんよという、私はエラーを取得していますされています

invalid column name 'RowNumber'

コード:

DECLARE @tableName NVARCHAR(30) 
DECLARE @newColumnName NVARCHAR(100) 
DECLARE @newDefaultValue NVARCHAR(100) 
DECLARE @newColumnType NVARCHAR(100) 
DECLARE @constraintName NVARCHAR (30) 

SET @tableName='TestTable' 
SET @newDefaultValue = 'James' 
SET @newColumnType ='NVARCHAR(100)' 
SET @newColumnName = 'James' 

CREATE TABLE #cons (constraintName NVARCHAR(100), RowNumber int) 

INSERT INTO #cons(constraintName, RowNumber) 
    SELECT 
     t.* 
    FROM 
     (SELECT 
      name, 
      ROW_NUMBER() OVER(ORDER BY name) AS RowNumber 
     FROM 
      sys.objects 
     WHERE 
      type_desc LIKE '%CONSTRAINT' 
      AND name like '%JAMES%' 
      AND name like '%JAMES%') AS t 

    SELECT * FROM #cons 

    IF EXISTS(SELECT * 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = '[dbo].[TestTable]' 
       AND COLUMN_NAME = 'James') 
    BEGIN 
     DECLARE @i int 
     DECLARE @numberOfRows int 

     SET @i = 1 
     SET @numberOfRows = (SELECT COUNT(*) FROM #cons) 

     WHILE(@i <= @numberOfRows) 
     BEGIN 
      SET @constraintName = (SELECT constraintName 
            FROM #cons 
            WHERE RowNumber = @i) 

      DECLARE @dropStatement NVARCHAR(500) 
      SET @dropStatement = 'ALTER TABLE [dbo].[TestTable] DROP CONSTRAINT ' + @constraintName 

      EXEC(@dropStatement) 

      SET @i = @i + 1 
     END          

     ALTER TABLE [dbo].[TestTable] 
     DROP COLUMN [James] 
    END 

    --ALTER TABLE [dbo].[TestTable] ADD James NVARCHAR(50) 
    DROP TABLE #cons 

私は、これは列を削除するために取得できますか?

+0

を@constraintname。問題は私が制約を落とすことができないということです。 – JamTay317

+1

'INFORMATION_SCHEMA.COLUMNS'をクエリしてそこにあるデータがどのように見えるのかをお勧めします。 'TABLE_NAME'は' [dbo]。[TestTable] 'にはなりません。 –

+0

あなたは何を意味していますか*私は制約を落とすことができません*あなたは何かエラーがありますか? –

答えて

-1

ALTER TABLE DROP 制約がドロップcolum作品

+1

ああ、制約を複数回ループして削除しないでください。 –

+0

ALTER TABLE DROP CONSTRAINT @constraintnameこの作業はありませんスカラー変数 "@constraintName"を宣言しなければなりません。私は '@constraintName'の近くで誤った構文を取得します。 – JamTay317

関連する問題