54

StudentSQL Server データベースのテーブルの主キーを削除する必要があります。

テーブルを編集しましたが、取得したスクリプトは次のとおりです

ALTER TABLE dbo.Student
    DROP CONSTRAINT PK__Student__9CC368536561EF8B

しかし、SQL Server クエリ ブラウザでこのスクリプトを実行して主キーを削除すると、

メッセージを表示します

メッセージ 3728、レベル 16、状態 1、行 1
'PK__Student__9CC368536561EF8B' は制約ではありません。
メッセージ 3727、レベル 16、状態 0、行 1

私の懸念では、これはランダムに生成されると思いますscriptPK__Student__9CC368536561EF8Bを使用して主キー制約を削除するのを手伝ってください。

前もって感謝します

4

3 に答える 3

99

sys.key_constraints テーブルで制約名を調べることができます。

SELECT name
FROM   sys.key_constraints
WHERE  [type] = 'PK'
       AND [parent_object_id] = Object_id('dbo.Student');

名前は気にせず、単に削除したい場合は、これと動的 sql を組み合わせて使用​​できます。

DECLARE @table NVARCHAR(512), @sql NVARCHAR(MAX);

SELECT @table = N'dbo.Student';

SELECT @sql = 'ALTER TABLE ' + @table 
    + ' DROP CONSTRAINT ' + name + ';'
    FROM sys.key_constraints
    WHERE [type] = 'PK'
    AND [parent_object_id] = OBJECT_ID(@table);

EXEC sp_executeSQL @sql;

このコードは Aaron Bertrand ( source ) からのものです。

于 2012-12-19T08:54:19.113 に答える
5

私が得た答えは、変数とサブクエリは機能せず、動的 SQL スクリプトを使用する必要があるということです。以下の作品:

DECLARE @SQL VARCHAR(4000)
SET @SQL = 'ALTER TABLE dbo.Student DROP CONSTRAINT |ConstraintName| '

SET @SQL = REPLACE(@SQL, '|ConstraintName|', ( SELECT   name
                                               FROM     sysobjects
                                               WHERE    xtype = 'PK'
                                                        AND parent_obj =        OBJECT_ID('Student')))

EXEC (@SQL)
于 2012-12-19T10:05:42.097 に答える