Coo*_*ter 6 sql sql-server ssms
我的 sql server 中有一个现有表,我想添加一个聚集在该表列上的主键。我知道语法是:
ALTER TABLE PromotionBenefit
ADD CONSTRAINT PK_PromotionBenefit2 PRIMARY KEY CLUSTERED (PromotionBenefitCode);
GO
Run Code Online (Sandbox Code Playgroud)
问题是列上已经有一个主键(相同的约束名称)。所以它会抛出一个错误。那没关系。我想知道是否可以在我的查询中添加一个 IF NOT Exists,这样它就不会抛出任何错误。
要使用的语法是什么?
编辑:有没有办法使用这种方式:如果不存在....创建主键集群而不是像上面显示的那样改变表?可以这样做吗:
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
Run Code Online (Sandbox Code Playgroud)
您必须执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
如果你认为这不是更好,那么试试这个:
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
Run Code Online (Sandbox Code Playgroud)
尝试这个:
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
Run Code Online (Sandbox Code Playgroud)
希望对您有帮助。
| 归档时间: |
|
| 查看次数: |
7744 次 |
| 最近记录: |