繁体   English   中英

没有身份插入列

[英]Insert into column without having IDENTITY

我有桌子

CREATE TABLE [misc]
(
    [misc_id] [int] NOT NULL,
    [misc_group] [nvarchar](255) NOT NULL,
    [misc_desc] [nvarchar](255) NOT NULL
)

misc_id [int] not null应该是IDENTITY (1,1)但不是,现在我遇到了问题

使用插入到该表中的简单表格,但是由于misc_id正在寻找用户无法访问的号码,除非他们有权访问数据库。

我知道一个选项是创建另一个使其成为IDENTITY(1,1)并复制该数据。

还有另一种方法可以解决这个问题吗?

INSERT INTO misc (misc_group, misc_desc)
VALUES ('#misc_group#', '#misc_desc#')

我有SQL Server 2012

将int列更改为标识可能会导致问题,因为默认情况下,如果不使用set identity_insert命令,则无法将值插入到Identity列中。 因此,如果您已有将值插入到Identity列中的代码,它将失败。 但是,允许SQL Server插入值(将其更改为Identity列)要容易得多,因此我将misc_id更改为Identity列,并确保没有程序将值插入misc_id。

如果不能更改表,则可以尝试插入另一个具有最新[misc_id]值的表,因此,每当在表中插入新记录时,都将检索该值,将其添加1,并将其用作新表。 ID。 只是不要忘了之后要更新表。

您应该使用所需的标识列重新创建表。 以下语句将使您接近。 在您迁移数据时,SQL Server会自动将表的标识字段调整为MAX(misc_id)+ 1。

您显然需要停止尝试在新记录中插入misc_id。 插入记录后,您需要检索SCOPE_IDENTITY()列。

-- Note: I'd recommend having SSMS generate your base create statement so you know you didn't miss anything.  You'll have to export the indexes and foreign keys as well.  Add them after populating data to improve performance and reduce fragmentation.
CREATE TABLE [misc_new]
(
    [misc_id] [int] NOT NULL IDENTITY(1,1),
    [misc_group] [nvarchar](255) NOT NULL,
    [misc_desc] [nvarchar](255) NOT NULL
    -- Todo: Don't forget primary key but can be added later (not recommended).
)
GO

SET IDENTITY_INSERT misc_new ON;

INSERT INTO misc_new
(
    [misc_id],
    [misc_group],
    [misc_desc]
)
SELECT
    [misc_id],
    [misc_group],
    [misc_desc]
FROM misc
ORDER BY misc_id;

SET IDENTITY_INSERT misc_new OFF;
GO

EXEC sp_rename 'misc', 'misc_old';
EXEC sp_rename 'misc_new', 'misc';
GO

MSSQL 2012您可以使用SEQUENCE对象:

CREATE SEQUENCE [dbo].[TestSequence] 
 AS [BIGINT]
 START WITH 1
 INCREMENT BY 1
GO

改变1START WITH 1MAX value for [misc_id] + 1

用法:

INSERT INTO misc (misc_id, misc_group, misc_desc)
VALUES (NEXT VALUE FOR TestSequence, '#misc_group#','#misc_desc#')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM