标签: identity-column

如何轻松找到IDENTITY列有溢出的危险?

我的数据库已经老了,我最大的一个INT IDENTITY列的价值大约是13亿.这将溢出约21亿.我计划增加它的大小,但由于数据库中的记录数量,我不想太快这样做.我可以在增加列大小之前替换我的数据库硬件,这可能会抵消这可能导致的任何性能问题.我还想关注我的数据库中超过50%已满的所有其他列.这是很多表,并且手动检查每个表是不实际的.

这就是我现在获得价值的方式(我知道返回的值可能会略微过时,但这对我的目的来说已经足够了):

PRINT IDENT_CURRENT('MyDatabase.dbo.MyTable')
Run Code Online (Sandbox Code Playgroud)

我可以用它INFORMATION_SCHEMA来获取这些信息吗?

sql-server maintenance overflow information-schema identity-column

5
推荐指数
2
解决办法
1万
查看次数

Identity列上的Sql Server 2005主键冲突

我遇到了一个奇怪的问题,我需要一些帮助来解决这个问题.

我有一个数据库,除了所有的应用程序数据列之外,还有一个ID列(定义为int not null,Identity,从1开始,递增1).表的主键是ID列,没有其他组件.

由于应用程序必须允许多次提交相同数据,因此没有可用作"自然主键"的数据集.

我有一个存储过程,这是将新记录添加到表中的唯一方法(除了直接以db所有者身份登录服务器)

虽然QA今天上午测试应用程序,他们进入一个新的记录到数据库中(使用的应用程序,因为它的目的是,当他们已经做了最后两周),并遇到一个主键违反了此表.

这与我十年来一直在做主键的方式相同,并且从未遇到过这种情况.

有想法该怎么解决这个吗?或者这是在很长一段时间内出现的宇宙射线故障之一.

感谢您提出的任何建议.

奈杰尔

美国东部时间6月12日下午1点15分编辑,以提供更多信息

架构的简化版本......

CREATE TABLE [dbo].[tbl_Queries](
[QueryID] [int] IDENTITY(1,1) NOT NULL,
[FirstName] [varchar](50) NOT NULL,
[LastName] [varchar](50) NOT NULL,
[Address] [varchar](150) NOT NULL,
[Apt#] [varchar](10) NOT NULL
    ... <12 other columns deleted for brevity>
[VersionCode] [timestamp] NOT NULL,
 CONSTRAINT [PK_tbl_Queries] PRIMARY KEY CLUSTERED 
(
    [QueryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

(还删除了默认值语句)

存储过程如下

insert …
Run Code Online (Sandbox Code Playgroud)

sql-server primary-key identity-column

4
推荐指数
1
解决办法
4189
查看次数

Linq to Sql:插入后我可以返回Identity_Scope吗?

在使用linq to sql进行插入后,如果我的表有标识列,我可以获取Identity_scope值吗?

identity-column linq-to-sql

4
推荐指数
1
解决办法
1017
查看次数

在域驱动设计中,guid作为身份领域更好吗?

使用guids作为标识字段而不是自动递增整数时,是否更容易实现域驱动设计?使用guids,您无需跳转到数据库即可获得实际值.

int domain-driven-design guid identity-column

4
推荐指数
2
解决办法
2319
查看次数

插入具有自动增量Id的表时保持外键关系

我有两个表:缺陷和缺陷数据.每个缺陷可能有也可能没有一个或多个缺陷数据.因此,DefectData将DefectId列作为外键.

两个表中的Id都是自动递增的标识.

我遇到的问题是,当我想插入一个新的缺陷及其缺陷数据时,首先插入缺陷并获取一个Id,但我不知道该ID是给DefectData的.我的解决方案是从匹配插入数据的缺陷中选择以获得Id.

  1. 插入缺陷
  2. 获取该缺陷的ID
  3. 插入DefectData(零或多个),ID为2.

设置IdentityInsert然后插入我自己的Id将无法工作,因为这是由网络服务器运行,可能有并发呼叫(我在这里吗?).

图

提前致谢.

sql insert foreign-key-relationship identity-column sql-server-2008

4
推荐指数
1
解决办法
2013
查看次数

在创建它的同一个T-SQL语句中获取IDENTITY值?

有人问我是否有一个insert语句,它有一个ID字段是"identity"列,如果分配的值也可以插入到同一个记录中的另一个字段中,则在同一个insert语句中.

这可能吗(SQL Server 2008r2)?

谢谢.

sql t-sql sql-server identity-column sql-server-2008-r2

4
推荐指数
1
解决办法
2879
查看次数

截断表后SQL Server继续标识计数

我似乎记得在MySQL中截断一个表时,自动递增的索引字段会在它停止的地方继续.因此,如果所述表被截断,最高id为100,则截断后的下一个id将为101.

有没有办法在SQL Server中执行此操作?我用超过1000行截断了我的表,但在截断后,下一个新ID在我的标识列中返回到1.我希望它继续下去.

sql-server identity-column

4
推荐指数
2
解决办法
8980
查看次数

SQL Server将大量行插入到具有默认值和标识列的表中

我需要在一个包含2列的表中插入大约6400000行

CREATE TABLE [DBName].[DBO].[BigList] 
(
[All_ID] [int] identity(1,1) NOT NULL, 
[Is_It_Occupied] [int] default(0) not null 
)
Run Code Online (Sandbox Code Playgroud)

我今天使用以下代码,这需要很长时间约100分钟.

    SET @NumberOfRecordsToInsert = 6400000;
WHILE (@NumberOfRecordsToInsert > 0)
BEGIN
    INSERT [DBName].[DBO].[BigList] DEFAULT VALUES;
    SET @NumberOfRecordsToInsert = @NumberOfRecordsToInsert - 1
END
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的方法来做到这一点?

sql-server insert identity-column sql-server-2008

4
推荐指数
2
解决办法
2万
查看次数

多插入SQL oracle

当您有标识列时,如何在 Oracle 12c 中使用 SQL 进行多次插入?

INSERT ALL
INTO Table1 (Column2) Values (1)
INTO Table1 (Column2) Values (2)
SELECT * FROM dual;
Run Code Online (Sandbox Code Playgroud)

其中 Table1 将 column1 作为标识,将标识列设置为具有违反主键约束的相同值。

CREATE TABLE Table1 (
  Table1Id NUMBER GENERATED ALWAYS AS IDENTITY,
  column2 VARCHAR2(255),
  column3 NUMBER,
  PRIMARY KEY (Table1Id)
);

INSERT ALL
  INTO Table1 (column2, column3) VALUES ('a', '1')
  INTO Table1 (column2, column3) VALUES ('b', '2')
SELECT * FROM dual;

--SQL Error: ORA-00001: unique constraint violated
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

sql oracle identity-column sql-insert oracle12c

4
推荐指数
1
解决办法
3903
查看次数

身份值硬编码的 SQL 最佳实践

首先,我知道这是一个相当主观的问题,但我需要某种正式的文件来帮助我教育我的客户。

背景 - 具有数百个表和 SP 的大型企业应用程序,所有表和使用标识列的规范化表和外键都经过精心设计。

我们的客户有一些员工使用我们生产数据库的复制副本在 Crystal 企业中编写复杂的报告。

我们有表格存储我将归类为“系统”基本信息的内容,例如办公室位置或公司内部门的列表、用户的标准角色集、其他对象的状态(打开/关闭等),基本上是数据这不会经常改变。

问题 - 报告设计者和财务分析师正在编写带有硬编码身份值的查询。像这样的东西

SELECT xxx FROM OFFICE WHERE OFFICE_ID = 6
Run Code Online (Sandbox Code Playgroud)

我在这里大大简化了,但基本上他们在他们的过程中到处使用这些硬编码的 int 值。

对于 SQL 开发人员来说,看到这一点显然会让你感到震惊,因为不这样做只是一种内在的本能。

然而,令人惊讶的是,我找不到任何关于为什么不应该这样做的文档甚至最佳实践文章。

他们会争辩说这样做很好,因为这些值永远不会改变,而且他们是对的,在单个系统中,这些值不会改变,但是在多个环境(staging/QA/Dev)中,这些值可以并且绝对不同,使他们的报告设计方法不可移植,并且只能在 1 个隔离的服务器环境中运行。

那里的任何 SQL 大师是否有任何更深入的信息/文章等,我可以用它来帮助我的客户教育他们为什么应该避免这种方法?

sql-server identity-column

4
推荐指数
1
解决办法
654
查看次数