我正在处理 INSERT 查询,该查询在名为 VulnerabilityAlertDocument
的表中插入新行此表有3个字段:
ID :这是自动增量 int,它是我的 PRIMARY KEY
VulnerabilityAlertId :此字段为int且必须具有相同的值** Id 列
SourceId :是varchar(50)并包含一些文字。
现在我的问题是如何做到这一点 VulnerabilityAlertId 具有与此新记录的* 自动增量 Id值相同的值。
如果我这样做:
INSERT INTO VulnerabilityAlertDocument
( [VulnerabilityAlertId], [SourceId] )
VALUES
(4, 'TEST');
它在表格中创建了一条新记录,其中未指定 Id 列值,因为它是自动增量, VulnerabilityAlertId 值为4
我需要在此查询中, VulnerabilityAlertId 值会自动设置为新行的 Id 值
我该怎么办呢?
答案 0 :(得分:1)
据我所知,您的问题是,您希望VulnerabilityAlertId
值是否始终使用新行的Id列的值自动设置?
如果是,则应更改表定义并将VulnerabilityAlertId
列添加为持久计算列:
alter table VulnerabilityAlertDocument drop column VulnerabilityAlertId;
alter table VulnerabilityAlertDocument add VulnerabilityAlertId as id persisted;
通过这样做,不需要指定VulnerabilityAlertId
列的值,因为每次插入新行时都会计算它。
希望这会有所帮助!!
答案 1 :(得分:1)
这就是我给这只猫皮肤的方式......
我会修改我的表定义(道歉,现在想不出更好的字段名称):
CREATE TABLE your_table (
Id int identity(1,1) NOT NULL
, SourceId varchar(50) NULL
, ActualVulnerabilityAlertId int NULL
, VulnerabilityAlertId As Coalesce(ActualVulnerabilityAlertId, Id)
);
基本上我已将VulnerabilityAlertId
更改为计算字段,并添加了一个新字段来保存“原始”数据。
然后您可以像这样填充表格:
INSERT INTO your_table (SourceId)
VALUES ('TEST 1');
INSERT INTO your_table (SourceId)
VALUES ('TEST 2');
INSERT INTO your_table (SourceId)
VALUES ('TEST 3');
INSERT INTO your_table (SourceId, ActualVulnerabilityAlertId)
VALUES ('TEST 4', 12345); -- Non-"default" value!
如果您需要更新值,则需要参考ActualVulnerabilityAlertId
字段:
UPDATE your_table
SET ActualVulnerabilityAlertId = 937
WHERE SourceId = 'TEST 2';
结果:
SELECT Id
, SourceId
, ActualVulnerabilityAlertId
, VulnerabilityAlertId
FROM your_table
ORDER
BY Id;
Id SourceId VulnerabilityAlertId ActualVulnerabilityAlertId
-- -------- -------------------- --------------------------
1 TEST 1 1 NULL
2 TEST 2 937 937
3 TEST 3 3 NULL
4 TEST 4 12345 12345
答案 2 :(得分:0)
有两种方式..
或 2.利用下面内置的sql server函数。
IDENT_CURRENT('table_name') + 1
答案 3 :(得分:-1)
如果要使用新创建的标识填充VulnerabilityID。
。然后您必须@@Idenity
检索生成的最新标识,然后将其发送到 VulnerabilityiD 的插入声明
例如:
declare @vulid int
insert into tablename(params
) - >生成标识的正常插入语句
现在,使用
获取最新的身份 set @vulid=(select @@Identity)
- >新生成的身份现在存储在此varaibale中
现在将其插入表中..
updatetablename set vulnerabilityid=@vulid;
这将确保将最新生成的ID作为Vulnerabilityid
插入希望这会有所帮助..