[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]如何获取插入查询记录集的主要内容,如果未能解决你的问题,请参考以下文章
通过在 cakephp 中执行的最后一个查询获取所有插入记录的 ID