2017-11-08 1 views
1

Ich habe eine vorhandene Tabelle in meinem SQL-Server und ich möchte einen Primärschlüssel in einer Spalte dieser Tabelle gruppiert hinzufügen. Ich weiß, dass die Syntax wäre:Verwenden, wenn nicht vorhanden auf Primärschlüssel

Das Problem ist, dass Spalte hat bereits einen Primärschlüssel (gleiche Einschränkung Name) auf. Es löst also einen Fehler aus. Das ist gut. Ich würde gerne wissen, ob es möglich ist, ein IF NOT Existiert auf meiner Abfrage hinzuzufügen, so würde es keinen Fehler werfen.

Was wäre die Syntax zu verwenden?

EDIT: Gibt es eine Möglichkeit, diesen Weg zu verwenden: WENN NICHT EXISTIERT .... PRIMARY KEY CLUSTERED ERSTELLEN statt die Tabelle wie oben gezeigt zu ändern?

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[PromotionBenefit]') AND name = N'idx_EventCode') 
CREATE NONCLUSTERED INDEX [idx_EventCode] ON [dbo].[PromotionBenefit] 
(
    [EventCode] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY] 
GO 

Antwort

2

Sie Folgendes tun:

DECLARE @IsPrimary INT 

SELECT @IsPrimary=COUNT(1) 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 
AND TABLE_NAME = 'PromotionBenefit' 

IF @IsPrimary>0 
BEGIN 
    SELECT 'Table already have Primary Key' 
END 
ELSE 
BEGIN 
    ALTER TABLE PromotionBenefit 
    ADD CONSTRAINT PK_PromotionBenefit2 PRIMARY KEY CLUSTERED (PromotionBenefitCode); 
    GO 
END 

Wenn Sie denken, es ist nicht besser als Versuchen Sie folgendes:

IF NOT EXISTS(
SELECT 1 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 
AND TABLE_NAME = 'PromotionBenefit') 
BEGIN 
    ALTER TABLE PromotionBenefit 
    ADD CONSTRAINT PK_PromotionBenefit2 PRIMARY KEY CLUSTERED (PromotionBenefitCode); 
    GO 
END 

Versuchen Sie, diese Kann es wie auf diese Weise durchgeführt werden :

IF NOT EXISTS(SELECT 1 FROM sys.objects WHERE type = 'PK' AND parent_object_id = OBJECT_ID ('PromotionBenefit')) 
BEGIN 
    ALTER TABLE PromotionBenefit 
    ADD CONSTRAINT PK_PromotionBenefit2 PRIMARY KEY CLUSTERED (PromotionBenefitCode) 
END 

Hoffe es hilft dir.

+0

Gibt es nicht einen kürzeren Weg, es zu tun? Wenn nicht existiert dann Primärschlüssel erstellen? –

+0

Versuchen Sie meine aktualisierte Antwort. Ich hoffe, es ist in Ordnung. – DineshDB

+0

Siehe meinen bearbeiteten Post für einen anderen Vorschlag –

Verwandte Themen