我有关于索引的(另一个)问题。
我使用以下代码:
CREATE TABLE [dbo].[PnrDetails1](
[OId] [int] IDENTITY(1,1) NOT NULL ,
[file_name] [varchar](256) NOT NULL,
[gds_id] [int] NOT NULL,
[pnr_locator] [varchar](15) NOT NULL,
[first_cust_name] [varchar](50) NOT NULL,
[ticket_number] [varchar](20) NOT NULL,
[full_price] [decimal](18, 0) NOT NULL,
[currency_desc] [varchar](4) NOT NULL,
[user_name] [varchar](50) NOT NULL,
[save_time] [datetime] NOT NULL,
[update_time] [datetime] NOT NULL,
[clerk_id] [int] NOT NULL,
[isUpdated] [bit] NOT NULL,
[isDeleted] [bit] NOT NULL,
[pnr_file_id] [int] NOT NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[PnrDetails1] ADD PRIMARY KEY CLUSTERED
(
[OId] ASC
)ON [PRIMARY]
这实际上是为我创建的脚本sql server 2008, 但是当我查看对象资源管理器时,我看到了一个丑陋的索引名称(类似于PK_ PnrDetai _CB394B1958F2C25C)。我该怎么改变它?如果是的话?
答案 0 :(得分:4)
虽然我同意@marc_s你应该总是预先声明这些名字,但我不同意你必须放弃并重新创建:
EXEC sp_rename 'PK_PnrDetai_CB394B1958F2C25C', 'my_new_shiny_name', OBJECT;
答案 1 :(得分:3)
你可以(并且你应该)明确地给你的主键约束命名:
ALTER TABLE [dbo].[PnrDetails1]
ADD CONSTRAINT PK_PnrDetails1
PRIMARY KEY CLUSTERED([OId] ASC) ON [PRIMARY]
您只能在创建时执行此操作 - 因此,在您的情况下,您可能必须先删除它,然后使用正确,可读的名称重新创建它。
答案 2 :(得分:0)
或者使用这个:
DECLARE @new_pk_name VARCHAR(MAX)='pk_new_name' --here set new name of primary key
DECLARE @table VARCHAR(MAX)='dbo.table_name' --here set name of the table
DECLARE @old_pk_name VARCHAR(MAX)
SELECT
@old_pk_name=name
FROM sys.key_constraints
WHERE [type] = 'PK'
AND [parent_object_id] = OBJECT_ID(@table);
SET @old_pk_name=@table+'.'+@old_pk_name;
EXEC sp_rename @old_pk_name, @new_pk_name;
GO