我想INSERT在表格X中将该记录History立即复制到另一个表格后.
现在该表将主键作为Identity列,因此在实际插入之前,记录将不具有主键ID.
我的问题是,如果我trigger在此记录上执行此操作,我将获得该记录的身份ID,还是仍然是空白的?
不确定哪个选项是最新的最佳实践?我继续阅读本教程:
https://www.postgresqltutorial.com/postgresql-identity-column/
PostgreSQL 版本 10 引入了一个新的约束 GENERATED AS IDENTITY,它允许您自动为列分配一个唯一的数字。
GENERATED AS IDENTITY 约束是旧的SERIAL 列的符合SQL 标准的变体。
在示例中,他们使用身份作为主键:
CREATE TABLE color (
color_id INT GENERATED ALWAYS AS IDENTITY,
color_name VARCHAR NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
当您按照以下方式引用此表以获取外键时:
CREATE TABLE pallet (
id INT GENERATED ALWAYS AS IDENTITY,
color_1 REFERENCES color
color_2 REFERENCES color
);
Run Code Online (Sandbox Code Playgroud)
它现在会知道身份是主键吗?:
我不相信Silver Bullet,但我真的喜欢使用序列或自动编号标识列作为数据库表的主键列.它们是唯一的,它们索引很好,我不必担心空值.
另一方面,在某些情况下,当表中的其他唯一列可以用于相同目的时,它们似乎是多余的.比如说,您正在构建一个将9位邮政编码映射到城市区域的表格.邮政编码字段也可以正常工作(前提是您可以保证数据格式且不重复值).
要点:我和我们任何人的经历都是有限的.还有哪些真实的例子让人们选择不使用自动编号列作为表的主键,为什么?
这对我来说是一种"开阔视野"的东西,我希望从那些曾经使用过多数据库并有令人信服的理由选择其他人的人那里学到一点.
我的声明是将"Arnold Schwarzenegger"和"Hasta la vista baby"插入以下空SQL表中?
这个问题的标题最初是"如何将第一条记录插入到具有双向关联和自动生成的整数PK的SQL表中?" 但我不知道,如果我是那个措辞正确...基本上,我有两个表Actors和CatchPhrases.
Actors 好像:
ActorId int NOT NULL PK (autogenerated by db)
FavoriteCatchPhraseId int NOT NULL FK
Name varchar(200) NOT NULL
Run Code Online (Sandbox Code Playgroud)
CatchPhrases 好像:
CatchPhraseId int NOT NULL PK (autogenerated by db)
ActorId int NOT NULL FK
PhraseText varchar(500) NOT NULL
Run Code Online (Sandbox Code Playgroud)
因此,演员可以有多个短语,但必须至少有一个.一个口号与一个演员相关联.两个表中目前都没有数据.
sql sql-server insert identity-column bidirectional-relation
我目前正在研究数据迁移项目和与性能相关的问题,我想预定义一组身份,而不是让表自己生成它们.
我发现将identity属性添加到列并不容易,所以我想使用IDENTITY_INSERT ONstatement.
我的问题是:这会禁用对表的标识表的更新(这会影响性能),还是我需要真正删除identity列的属性?
我在我的C#项目中使用EF4.我遇到的问题是,当我尝试保存记录时,我收到主键违规,PK值为"0000-0000-0000-xxx".根据我的猜测,EF无法识别IsIdentity标志并生成guid值.在我的表的SQL Server数据库中,我指定了一个PK(uniqueidentifier> guid)并将其设置为IdentityColumn,因此我希望这可以直接进入我的项目,因为在SQL Server中生成了guid.有没有办法克服这个错误?
我想获得的KeyMembers,我在EDMX设置了StoreGeneratedPattern到Identity是有办法做到这一点?
我可以使用以下代码获取KeyMembers:
private static IEnumerable<EdmMember> GetKeyMembers(string entityName)
{
var objectContext = EntityModel.ObjectContext;
var metaData = objectContext
.MetadataWorkspace
.GetEntityContainer(objectContext.DefaultContainerName, DataSpace.CSpace)
.BaseEntitySets
.FirstOrDefault(x => x.ElementType.Name == entityName);
return metaData.ElementType.KeyMembers;
}
Run Code Online (Sandbox Code Playgroud)
我有这个问题,它也返回外键,但我只想让PrimaryKeys具有自动递增值.
我的查询遇到问题。基本上,我想做的是清空一个表,然后从另一个数据库中的同一个表中复制记录。
我确实使用SET IDENTITY_INSERT代码来确保在执行插入之前关闭标识列。但不知何故,它仍然向我抛出错误消息:
消息 8101,级别 16,状态 1,第 3 行
仅当使用列列表且 IDENTITY_INSERT 为 ON 时,才能指定表“dbo.UI_PAGE”中标识列的显式值。
以下是我的查询:
DELETE FROM [DB1].[dbo].[MY_TABLE]
SET IDENTITY_INSERT [DB1].[dbo].[MY_TABLE] ON
INSERT INTO [DB1].[dbo].[MY_TABLE]
SELECT *
FROM [DB2].[dbo].[MY_TABLE]
SET IDENTITY_INSERT [DB1].[dbo].[MY_TABLE] OFF
Run Code Online (Sandbox Code Playgroud)
有人能指出我哪一步做错了吗?
多谢!
我的 DWH 设计中有以下 ProductCategory 维度,以免丢失数据:
ProductSK ProductID ProductName BI_StartDate BI_EndDate
-1 -1 Undefined 99991231 99991231
Run Code Online (Sandbox Code Playgroud)
ProductSK 是一个标识列。
我习惯在 SQL Server 中使用“打开/关闭身份插入”,如何在 Oracle 中执行相同操作?
这是我的维度 DDL :
CREATE TABLE ProductCategory (
ProductSK NUMBER GENERATED ALWAYS AS IDENTITY,
ProductID NUMBER NOT NULL,
ProductName VARCHAR2(100) NOT NULL,
BI_StartDate NUMBER NOT NULL,
BI_EndDate NUMBER NOT NULL,
);
Run Code Online (Sandbox Code Playgroud)
SQL Server 中的等效项:
SET IDENTITY_INSERT sometableWithIdentity ON;
SET IDENTITY_INSERT sometableWithIdentity OFF;
Run Code Online (Sandbox Code Playgroud) 我想从M包含至少一个负数的矩阵中删除这些列.例如,如果
M = (1 0 0 1)
(1 -1 0 2)
(2 3 4 -3)
Run Code Online (Sandbox Code Playgroud)
我希望M成为
M = (1 0)
(1 0)
(2 4)
Run Code Online (Sandbox Code Playgroud)
如何输入 M <- removeNegativeColumns(M) 代码?
identity-column ×10
sql-server ×5
sql ×3
c# ×2
identity ×2
t-sql ×2
dimensions ×1
insert ×1
matrix ×1
oracle ×1
performance ×1
postgresql ×1
primary-key ×1
r ×1
triggers ×1