如何为 SQL Server 数据库中的所有身份设置默认种子?

发布于 2024-08-26 05:20:08 字数 169 浏览 7 评论 0原文

有没有一种方法可以告诉 SQL Server 对 IDENTITY 列使用特定的默认种子值 - 假设(要运行的)CREATE TABLE 语句未指定一个?我并不真正关心更改现有数据或更改特定 IDENTITY 列的种子值。我希望所有新创建的标识列都有相同的种子。假设我无法以任何方式修改各个 CREATE TABLE 语句。

Is there a way to tell SQL server to use specific default seed value for IDENTITY columns - assuming the (to be run) CREATE TABLE statements do not specify one? I don't really care about altering existing data or altering the seed values for specific IDENTITY columns. I want the same seed for all newly created identity columns. Assume I cannot modify the individual CREATE TABLE statements in any way.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与之呼应 2024-09-02 05:20:08

语法是:

IDENTITY [ ( seed , increment ) ]

您必须同时指定种子和增量,或者两者都不指定。如果两者均未指定,则默认值为 (1,1)。除了 (1,1) 之外,无法设置不同的全局默认值。设置 (1,1) 以外的值的唯一方法是在列上对其进行编码。

这是文档:身份(属性)

编辑

基于此命令:

DBCC CHECKIDENT ( 'table_name', RESEED, new_reseed_value )

您可以使用此脚本将所有标识列重置为相同的 @new_reseed_value 值:

DECLARE @Tables table (RowNumber int identity(1,1) primary key, TableCommand sysname)
DECLARE @new_reseed_value     int
       ,@CurrentRow           int
       ,@MaxRows              int
       ,@CurrentTableCommand  nvarchar(4000)

SET @new_reseed_value=9876

INSERT INTO @Tables
        (TableCommand)
    SELECT
        'DBCC CHECKIDENT ( ''['+SCHEMA_NAME( OBJECTPROPERTY( OBJECT_ID, 'SCHEMAID' ))
            +'].['+OBJECT_NAME( OBJECT_ID )+']'', RESEED, '+COALESCE(CONVERT(varchar(10),@new_reseed_value),'1')+' ) '
        FROM  SYS.COLUMNS
            WHERE COLUMNPROPERTY(OBJECT_ID, NAME, 'IsIdentity') = 1
            --AND exclude some tables here ifnecessary
SELECT @MaxRows=@@ROWCOUNT,@CurrentRow=0

WHILE @CurrentRow<@MaxRows
BEGIN
    SELECT @CurrentTableCommand=''
          ,@CurrentRow=@CurrentRow+1
    SELECT 
        @CurrentTableCommand=TableCommand
        FROM @Tables
        WHERE RowNumber=@CurrentRow
    --PRINT @CurrentTableCommand
    EXEC(@CurrentTableCommand)
END

the syntax is:

IDENTITY [ ( seed , increment ) ]

You must specify both the seed and increment or neither. If neither is specified, the default is (1,1). There is no way to set a different global default other than the (1,1). The only way to set a value other than (1,1) is to code it on the column.

here is the documentation: IDENTITY (Property)

EDIT

Based on this command:

DBCC CHECKIDENT ( 'table_name', RESEED, new_reseed_value )

You could use this script to reset all identity columns to the same @new_reseed_value value:

DECLARE @Tables table (RowNumber int identity(1,1) primary key, TableCommand sysname)
DECLARE @new_reseed_value     int
       ,@CurrentRow           int
       ,@MaxRows              int
       ,@CurrentTableCommand  nvarchar(4000)

SET @new_reseed_value=9876

INSERT INTO @Tables
        (TableCommand)
    SELECT
        'DBCC CHECKIDENT ( ''['+SCHEMA_NAME( OBJECTPROPERTY( OBJECT_ID, 'SCHEMAID' ))
            +'].['+OBJECT_NAME( OBJECT_ID )+']'', RESEED, '+COALESCE(CONVERT(varchar(10),@new_reseed_value),'1')+' ) '
        FROM  SYS.COLUMNS
            WHERE COLUMNPROPERTY(OBJECT_ID, NAME, 'IsIdentity') = 1
            --AND exclude some tables here ifnecessary
SELECT @MaxRows=@@ROWCOUNT,@CurrentRow=0

WHILE @CurrentRow<@MaxRows
BEGIN
    SELECT @CurrentTableCommand=''
          ,@CurrentRow=@CurrentRow+1
    SELECT 
        @CurrentTableCommand=TableCommand
        FROM @Tables
        WHERE RowNumber=@CurrentRow
    --PRINT @CurrentTableCommand
    EXEC(@CurrentTableCommand)
END
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文