shy1766IT

设计一张表时没有考虑到主键Id及自增长,现又需要,原脚本:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[ForbiddenType](
    [Id] [int] NOT NULL,
    [Type] [nvarchar](100) NOT NULL
) ON [PRIMARY]

GO

EXEC sys.sp_addextendedproperty @name=N\'MS_Description\', @value=N\'屏蔽类型(0全部)\' , @level0type=N\'SCHEMA\',@level0name=N\'dbo\', @level1type=N\'TABLE\',@level1name=N\'ForbiddenType\', @level2type=N\'COLUMN\',@level2name=N\'Type\'
GO

 

并初始化了表数据:

INSERT [dbo].[ForbiddenType] ([Id], [Type]) VALUES (0, N\'--All--\')
INSERT [dbo].[ForbiddenType] ([Id], [Type]) VALUES (1, N\'用户评论(客户端展示)\')
INSERT [dbo].[ForbiddenType] ([Id], [Type]) VALUES (2, N\'后台编辑(服务端)\')

在此条件下实现后台操作Type与Type对应的值可编辑,要重新修改Id字段属性;

要成为IDENTITY标识列的列只能先被删除然后再添加同名列

----删除列
alter table tablename drop COLUMN id
GO
----添加IDENTITY列
alter table tablename add id int identity(1,1)
GO
----设置IDENTITY列为主键
alter table tablename add constraint [PK_tablename] PRIMARY KEY CLUSTERED ([id])

但是这样做会改变主键字段在表中的顺序

如果不想改变表中主键的位置,有两种思路,一是删除表后重建;一是不删除,将字段逐个删除再依次添加字段:

看代码:

--修改表ForbiddenType
IF EXISTS (
       SELECT *
       FROM   dbo.sysobjects
       WHERE  id = OBJECT_ID(N\'[dbo].[ForbiddenType]\')
              AND OBJECTPROPERTY(id ,N\'IsUserTable\') = 1
   )
    DROP TABLE [dbo].[ForbiddenType]
 GO   
CREATE TABLE [dbo].[ForbiddenType]
(
    [Id]         [int] NOT NULL IDENTITY(1 ,1)
   ,[TypeId]     INT NOT NULL
   ,[Type]       [nvarchar](100) NOT NULL
   ,
) ON [PRIMARY]
    -- TypeId字段说明
EXEC sys.sp_addextendedproperty @name=N\'MS_Description\'
    ,@value=N\'屏蔽类型对应值(类型对应Id)\'
    ,@level0type=N\'SCHEMA\'
    ,@level0name=N\'dbo\'
    ,@level1type=N\'TABLE\'
    ,@level1name=N\'ForbiddenType\'
    ,@level2type=N\'COLUMN\'
    ,@level2name=N\'TypeId\' 
    -- Type字段说明
EXEC sys.sp_addextendedproperty @name=N\'MS_Description\'
    ,@value=N\'屏蔽类型\'
    ,@level0type=N\'SCHEMA\'
    ,@level0name=N\'dbo\'
    ,@level1type=N\'TABLE\'
    ,@level1name=N\'ForbiddenType\'
    ,@level2type=N\'COLUMN\'
    ,@level2name=N\'Type\'

INSERT INTO [dbo].[ForbiddenType]
  (
    TypeId
   ,TYPE
  )
VALUES
  (
    1
   ,\'用户评论(客户端展示)\'
  )
INSERT INTO [dbo].[ForbiddenType]
  (
    TypeId
   ,TYPE
  )
VALUES
  (
    2
   ,\'后台编辑(服务端)\'
  )
GO

 

TRUNCATE TABLE ForbiddenType  --清空数据库表数据
                              --删除表中列Type的描述属性:   
EXEC sp_dropextendedproperty \'MS_Description\',
     \'SCHEMA\',
     dbo,
     \'TABLE\',
     \'ForbiddenType\',
     \'COLUMN\',
     TYPE   
GO
ALTER TABLE ForbiddenType DROP COLUMN Id
GO
--添加自增的Id列并设为主键
ALTER TABLE ForbiddenType  ADD [IDs] [int] NOT NULL IDENTITY(1, 1) 
EXEC sp_rename \'ForbiddenType.[IDs]\',
     \'Id\',
     \'COLUMN\'; 
ALTER TABLE ForbiddenType ADD CONSTRAINT [PK_ForbiddenType] PRIMARY KEY 
CLUSTERED([Id]) 
ALTER TABLE ForbiddenType  ADD [TypeId] [int] NOT NULL
GO
 
ALTER TABLE ForbiddenType DROP COLUMN TYPE
ALTER TABLE ForbiddenType  ADD TYPE [nvarchar](100) NOT NULL
GO 

EXEC sys.sp_addextendedproperty @name = N\'MS_Description\',
     @value = N\'屏蔽类型对应值(类型对应Id)\',
     @level0type = N\'SCHEMA\',
     @level0name = N\'dbo\',
     @level1type = N\'TABLE\',
     @level1name = N\'ForbiddenType\',
     @level2type = N\'COLUMN\',
     @level2name = N\'TypeId\' 
    -- Type字段说明
EXEC sys.sp_addextendedproperty @name = N\'MS_Description\',
     @value = N\'屏蔽类型\',
     @level0type = N\'SCHEMA\',
     @level0name = N\'dbo\',
     @level1type = N\'TABLE\',
     @level1name = N\'ForbiddenType\',
     @level2type = N\'COLUMN\',
     @level2name = N\'Type\'
    GO
INSERT INTO [dbo].[ForbiddenType]
  (
    TypeId,
    TYPE
  )
VALUES
  (
    1,
    \'用户评论(客户端展示)\'
  )
INSERT INTO [dbo].[ForbiddenType]
  (
    TypeId,
    TYPE
  )
VALUES
  (
    2,
    \'后台编辑(服务端)\'
  )

 

 

对于一张表,想要添加与删除主键,可参见下面

if exists (select * from dbo.sysobjects where id = object_id(N\'[dbo].[主键名]\') and OBJECTPROPERTY(object_id(N\'[列名]\'), N\'IsPrimaryKey\') = 1)
ALTER  TABLE 表名 DROP  CONSTRAINT [主键名]
ALTER  TABLE 表名 ADD   CONSTRAINT [新主键名] PRIMARY   KEY  ([列名])

if exists (select * from dbo.sysobjects where id = object_id(N\'[dbo].[PK_orders]\') and OBJECTPROPERTY(OBJECT_ID(N\'dbo.[orders].[pi_no]\'), N\'IsPrimaryKey\') = 1)
ALTER  TABLE orders DROP  CONSTRAINT [PK_orders]
ALTER  TABLE orders ADD   CONSTRAINT [PK_orders] PRIMARY KEY  ([form_no]) ON  [PRIMARY]

 

分类:

技术点:

相关文章:

  • 2021-10-19
  • 2022-12-23
  • 2021-09-19
  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2021-10-18
猜你喜欢
  • 2022-12-23
  • 2021-09-01
  • 2019-02-23
  • 2021-10-18
  • 2021-12-22
  • 2021-12-22
相关资源
相似解决方案