[Azure/mssql]我如何获得插入查询记录集
我正在使用mssql。 插入记录后,我想获取数据的ID。 但我不知道那么做。 我的代码如下。 请给我答案。[Azure/mssql]我如何获得插入查询记录集
var mssql = require('mssql');
mssql.connect(config.mssql, function(err) {
var request = new mssql.Request();
request.query('insert -----'),function(err, data) {
console.log(data);
}
插入工作正常,但控制台日志[未定义] ...
这是表的DDL
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo]。[Feature](
[id] nvarchar NOT NULL CONSTRAINT [DF_Feature_id] DEFAULT(CONVERT(nvarchar,newid(),(0))),
[createdAt] datetimeoffset NOT NULL CONSTRAINT [DF_Feature_createdAt] DEFAULT(CONVERT(datetimeoffset,sysutcdatetime(), 0))),
[updatedAt] DATETIMEOFFSET NULL,
[版] [时间戳] NOT NULL,
[删除] [比特] NULL DEFAULT((0)),
[标题] nvarchar的NULL,
[text] nvarchar NULL,
[period_from] datetimeoffset NULL,
[period_to] datetimeoffset NULL,
[优先] [浮子] NULL,
PRIMARY KEY NONCLUSTERED
(
[ID] ASC
)WITH(STATISTICS_NORECOMPUTE = OFF,IGNORE_DUP_KEY = OFF)
)
GO
使用OUTPUT子句。下面是语法的例子...
IF OBJECT_ID('RandomTest.dbo.FeatureID_Capture', 'U') IS NOT NULL
DROP TABLE dbo.FeatureID_Capture;
GO
CREATE TABLE dbo.FeatureID_Capture (
Id NVARCHAR(50)
);
GO
IF OBJECT_ID('RandomTest.dbo.Feature', 'U') IS NOT NULL
DROP TABLE dbo.Feature;
GO
CREATE TABLE dbo.Feature (
id NVARCHAR(40) NOT NULL
CONSTRAINT DF_Feature_id
DEFAULT (CONVERT(NVARCHAR(40), NEWID(), (0))),
createdAt DATETIMEOFFSET NOT NULL
CONSTRAINT DF_Feature_createdAt
DEFAULT (CONVERT(DATETIMEOFFSET, SYSUTCDATETIME(), (0))),
updatedAt DATETIMEOFFSET NULL,
version TIMESTAMP NOT NULL,
deleted BIT NULL
DEFAULT ((0)),
title NVARCHAR (10) NULL,
text NVARCHAR (10) NULL,
period_from DATETIMEOFFSET NULL,
period_to DATETIMEOFFSET NULL,
priority FLOAT NULL,
PRIMARY KEY NONCLUSTERED (id ASC)
WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF)
);
GO
--=======================================================
INSERT dbo.Feature (title, text)
OUTPUT Inserted.id INTO dbo.FeatureID_Capture(Id)
VALUES ('t 1', 'txt 1'), ('t 2', 'txt 22'), ('t 3', 'txt 333');
-------------------------------------
SELECT *FROM dbo.FeatureID_Capture fic;
输出...
Id
--------------------------------------------------
4E9EB3CD-AD44-4837-9B87-BBB85308FFBF
B93983B6-C15A-4534-8AC4-EB9404964C09
FAFA678A-8416-490C-A871-3963EAB67B9F
谢谢。这似乎需要一个IDENTITY列。但我们的表没有那个。我不知道这是否是原因,但会出现以下错误。“OUTPUT INTO子句的目标表不能有任何启用触发器“ –
它不...我更新了我的示例...我删除了IDENTITY(1,1)属性并将手动编码的ID值添加到插入。 –
谢谢。嗯...在我的情况下,ID插入时插入...所以我不能通过ID来查询... –
对于单身插入,你可以添加'SELECT SCOPE_IDENTITY()'在同一的'INSERT'后声明批量。或者,指定一个'OUTPUT'子句(OUTPUT inserted.ID)),它也可以处理多行插入。请参阅https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql/ –
@DanGuzman感谢您的回复。我试过了,但没有成功.request。查询('insert -----; SELECT SCOPE_IDENTITY()),函数(err,data)。但数据未定义。 –
@YoshihideNishimoto为所涉及的表格填写ddl - 至少是主键的一部分。推测你的桌子有一个标识栏 - 你有不同类型的合成键吗? – SMor