私はこれで約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
私は、これは列を削除するために取得できますか?
前
を@constraintname。問題は私が制約を落とすことができないということです。 – JamTay317'INFORMATION_SCHEMA.COLUMNS'をクエリしてそこにあるデータがどのように見えるのかをお勧めします。 'TABLE_NAME'は' [dbo]。[TestTable] 'にはなりません。 –
あなたは何を意味していますか*私は制約を落とすことができません*あなたは何かエラーがありますか? –