[Azure/mssql]如何获取插入查询记录集

Posted

技术标签:

【中文标题】[Azure/mssql]如何获取插入查询记录集【英文标题】:[Azure/mssql]How do I get Insert query recordset 【发布时间】:2017-09-03 12:37:00 【问题描述】:

我正在使用 mssql。 插入记录后,我想获取数据的 id。 但我不知道这样做很热。 我的代码如下。 请给我答案。

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

设置 ANSI_NULLS 为 ON 去 设置 QUOTED_IDENTIFIER ON 去 创建表 [dbo].[功能]( [id] nvarchar NOT NULL 约束 [DF_Feature_id] DEFAULT (CONVERT(nvarchar,newid(),(0))), [createdAt] datetimeoffset NOT NULL 约束 [DF_Feature_createdAt] DEFAULT (CONVERT(datetimeoffset,sysutcdatetime(),(0))), [updatedAt] datetimeoffset NULL, [版本] [时间戳] NOT NULL, [已删除] [位] NULL DEFAULT ((0)), [标题] nvarchar NULL, [文本] nvarchar NULL, [period_from] datetimeoffset NULL, [period_to] datetimeoffset NULL, [优先级] [浮点数] NULL, 主键非集群 ( [id] ASC )WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF) )

【问题讨论】:

对于单例插入,您可以在同一批次中的INSERT 语句之后添加SELECT SCOPE_IDENTITY()。或者,指定一个OUTPUT 子句(OUTPUT inserted.ID)),它也可以处理多行插入。见docs.microsoft.com/en-us/sql/t-sql/queries/… @DanGuzman 感谢您的回复。我试过了,但没有用 .request.query('insert -----;SELECT SCOPE_IDENTITY()),function(err,data)。但是数据未定义。 @YoshihideNishimoto 为所涉及的表发布 ddl - 至少是作为主键一部分的列。大概你的表有一个标识列 - 你有不同类型的合成键吗? @SMor 感谢您的回复。我发布了 ddl。 【参考方案1】:

使用 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传递给查询...... 您使用的是什么版本的 SQL Server? 谢谢。它工作正常。我可以得到 id!顺便说一下,我们为什么要删除并再次创建这些表??在这样做之前,它没有工作......

以上是关于[Azure/mssql]如何获取插入查询记录集的主要内容,如果未能解决你的问题,请参考以下文章

如果同时插入两条记录,如何获取最后一个ID

如何从PHP中的URL获取多个同名参数并将所有记录插入表中

Hive 查询以获取插入表中的最后一条记录

通过在 cakephp 中执行的最后一个查询获取所有插入记录的 ID

如何从此 ADODB.Recordset 中获取插入 ID?

oracle 如何获得新插入记录的id