Questions tagged «identity»

在表中创建一个标识列。此属性与CREATE TABLE和ALTER TABLE Transact-SQL语句一起使用。

1
为什么不支持删除列上的Identity属性
我读过,在SQL Server 2000之后,删除了“取消身份”身份列的功能。而且这是“通过设计”(不仅仅是缺少的功能)。 这是我在博客上找到的示例。它涉及更新系统表。(并且该功能在SQL Server 2000之后被删除。)我知道通过系统表执行此操作不是一个好主意。我只是想知道为什么没有其他功能可以做到这一点。 解决此问题将使我付出大量工作。(在无法停机的环境中将数亿行复制到新表中。) 所以我想问“为什么”。 Sql Server 2005和更高版本中发生了什么更改,这使这件事变得不好了?还是总是不好,只是没有被锁定? 将身份列再次设为普通列会违反什么“最佳实践”(或类似原则)? - 更新以回答“为什么要这样做”的请求: 这是一个非常高级的摘要:我将开始向表中添加分区。(这样我就可以存档/清除旧数据。)这很容易。但是我有时需要将记录移到另一个分区,以免被删除(当一个分区用于归档/删除时)。(我的分区列增加了2,以便始终有空间将行移动到其他分区。) 但是,如果分区列是一个标识列,那么我必须删除并重新插入该值(无法更新标识列的值)。这会导致复制问题。 所以我想使用序列而不是标识列。但是在大型数据库上,这种切换非常困难。

8
标识列或UDF显式生成唯一ID?
我正在就是否最好PRIMARY KEY使用Identity Columns(我们明确使用生成唯一ID的UDF)进行辩论。 我在为“身份栏”争论。 他说,我的搭档正在争吵手动生成值 通过将UDF放在另一个可以放置UDF的桌子上 锁定资源 用一个称为ID_Value的字段递增ID表1 使用它作为全局唯一标识符 或者id+1在插入时让表格做一个 在没有标识约束的服务器和/或环境之间移动数据更容易;从一个有数据的数据库移动到另一个具有类似暂存数据或虚拟数据的类似数据库。对于非生产中的测试,我们可能希望将昨天的所有记录拉到暂存阶段进行测试。 哪种实现更有意义?

1
IDENTITY_INSERT如何影响并发性?
我正在尝试使用第三方第三方SAP附加组件来帮助客户,该附加组件存在发布故障并且已不再支持。 在某些情况下,它将存档和不完整的帖子从发布队列表存档到发布存档表。我需要将这些存档结果移回队列。 队列ID是一个标识列,我希望保持不变。 问题是,如果我关闭了identity_insert on / insert / identity_insert,那么与创建队列条目并期望identity列自动生成的进程的并发性有什么期望? 任何最好的方式来演示这种行为的指针也将不胜感激。

2
是否建议使用身份代替主键?
我们可以声明一个Identitylike,id_num这样id_num它将具有唯一编号的增量。 CREATE TABLE new_employees ( id_num int IDENTITY(1,1), fname varchar (20), minit char(1), lname varchar(30) ) 由于为每行提供了唯一的编号,因此建议使用它Identity作为替代方法吗?Primary keyIdentity

1
使用COALESCE将主键从IDENTITY更改为持久计算列
为了使应用程序与整体数据库脱钩,我们尝试将各种表的INT IDENTITY列更改为使用COALESCE的PERSISTED计算列。基本上,我们需要分离的应用程序能够为许多应用程序之间共享的通用数据更新数据库,同时仍允许现有应用程序在这些表中创建数据而无需修改代码或过程。 因此,从本质上讲,我们已经脱离了的列定义; PkId INT IDENTITY(1,1) PRIMARY KEY 至; PkId AS AS COALESCE(old_id, external_id, new_id) PERSISTED NOT NULL, old_id INT NULL, -- Values here are from existing records of PkId before table change external_id INT NULL, new_id INT IDENTITY(2000000,1) NOT NULL 在所有情况下,PkId也是主键,在除一种情况以外的所有情况下,它都是聚集的。所有表都具有与以前相同的外键和索引。本质上,新格式允许由解耦的应用程序提供PkId(作为external_id),但也允许PkId作为IDENTITY列值,因此允许通过使用SCOPE_IDENTITY和@@ IDENTITY依赖于IDENTITY列的现有代码照常工作。 我们遇到的问题是,我们遇到了一些查询,这些查询过​​去可以在可接受的时间内运行,现在已经完全崩溃了。这些查询使用的生成查询计划与以前不同。 鉴于新列是PRIMARY KEY,数据类型与以前相同,并且为PERSISTED,因此我希望查询和查询计划的行为与之前相同。就SQL Server如何生成执行计划而言,COMPUTED PERSISTED INT PkId是否应在本质上与显式INT定义具有相同的行为?您还可以看到这种方法还有其他可能的问题吗? …

2
将标识列从INT更改为BIGINT
我有一个带有标识列的表,该列也是主键。当前,它有5000万行,标识列的最高值为148921803。该表具有很多DELETEs并对其INSERTS执行,因此值很高。 我们希望将数据类型从更改为INT,BIGINT以准备添加更多行。请注意,没有对PK列的引用。 用最少的停机时间来做到这一点的最佳方法是什么?我有两个选择。 放下PK并更改色谱柱;要么 复制落重命名方法,描述在这里:


3
如何在保留FK关系的同时将迁移数据复制到带有Identity列的新表中?
我想将数据从一个数据库迁移到另一个数据库。表模式完全相同: CREATE TABLE Customers( [Id] INT NOT NULL PRIMARY KEY IDENTITY, (some other columns ......) ); CREATE TABLE Orders( [Id] INT NOT NULL PRIMARY KEY IDENTITY, [CustomerId] INT NOT NULL, (some other columns ......), CONSTRAINT [FK_Customers_Orders] FOREIGN KEY ([CustomerId]) REFERENCES [Customers]([Id]) ) 这两个数据库具有不同的数据,因此在两个数据库中,同一表的新标识密钥将有所不同。那不是问题;我的目标是将新数据添加到现有数据中,而不是完全替换整个表中的所有数据。但是,我想保留插入数据的所有父子关系。 如果我使用SSMS的“生成脚本”功能,则脚本将尝试使用相同的ID进行插入,这将与目标数据库中的现有数据发生冲突。如何仅使用数据库脚本复制数据? 我希望目标处的身份列从其上一个值正常继续。 Customers没有任何其他UNIQUE NOT NULL约束。它是确定在其他列重复数据(我使用的是Customers与Orders只是作为一个例子在这里,所以我没有解释整个故事)。问题是关于任何一对N关系。

1
在SQL Server中是否已记录$ IDENTITY并且可靠?
我了解到SQL Server可以使用伪列返回表的(单个)标识列的值$IDENTITY: SELECT $IDENTITY FROM Table 此功能是否已记录且可靠?唯一官方提及的内容是在IDENTITY页面上,但它已包含在代码示例中。这表明它可能打算不做记录。与此功能相匹配的Google也很少。

2
用主键创建一个“ INTO”表
也许对于这个社区来说,我的问题很容易,但是对我(一个简单的Java程序员)来说,这是一个大问题。 我有一个越来越多的数据的大数据库。因此,外部数据库管理员创建了一个作业,该作业在临时表中向我显示所需的数据。但是他创建的表没有主键,当我的java项目去读取该表时,出现错误。 我无法读取此表,因为主键不存在。 我可以在不更改此复杂过程结构的情况下在过程中插入创建自动增量主键的可能性吗? 这是存储过程代码的开头: USE [MYDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[spSchedula_Scadenzario] as begin drop table MYDB.dbo.tmpTable select aa.* into MYDB.dbo.tmpTable from (...) 提前致谢
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.