- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 IDENTITY
列的表,并且我在该表上有一个 INSTEAD OF
触发器。如果 IDENTITY_INSERT
打开,我想插入为 IDENTITY
列手动指定的值。
有没有办法妥善应对这种情况,比如检测IDENTITY_INSERT
的值?从阅读中可以看出,检测特定表的 IDENTITY_INSERT
的当前值在过去是不可能的。我不知道更新版本的 SQL Server 是否可行。
建表SQL:
CREATE TABLE [TestTable]
(
[Id] INTEGER IDENTITY NOT NULL PRIMARY KEY,
[ExampleField] BIT NOT NULL DEFAULT(1)
)
这是我目前尝试过的方法,但它似乎相当浪费,因为 IDENTITY_INSERT
可能在大部分时间都处于关闭状态,这意味着它总是会在第一次插入尝试时失败,这在性能方面似乎很浪费。
CREATE TRIGGER [dbo].[trTestTable_ioi] ON [dbo].[TestTable] INSTEAD OF INSERT
AS
BEGIN
BEGIN TRY
INSERT INTO [TestTable]([Id],[ExampleField])
SELECT [Id], [ExampleField]
FROM [inserted]
END TRY
BEGIN CATCH
INSERT INTO [TestTable]([ExampleField])
SELECT [ExampleField]
FROM [inserted]
END CATCH
END
最佳答案
如果您的 IDENTITY
种子和增量使得生成的值始终为非零(正种子和增量或负种子和增量),您可以检查非零值虚拟 inserted
表并在存在时使用该值。这依赖于我的观察,即使用 INSTEAD OF
触发器和 IDENTITY_INSERT OFF
时身份值为零。但是,我找不到专门记录此行为的信息,因此您应该在您的环境中进行审查,并自行承担使用风险。
例子:
CREATE TRIGGER [dbo].[trTestTable_ioi] ON [dbo].[TestTable] INSTEAD OF INSERT
AS
SET NOCOUNT ON;
IF EXISTS(SELECT * FROM inserted WHERE ID <> 0)
BEGIN
--IDENTITY_INSERT is ON
INSERT INTO [TestTable]([Id],[ExampleField])
SELECT [Id], [ExampleField]
FROM [inserted];
END
ELSE
BEGIN
--IDENTITY_INSERT is OFF
INSERT INTO [TestTable]([ExampleField])
SELECT [ExampleField]
FROM [inserted];
END;
GO
SET IDENTITY_INSERT dbo.TestTable OFF;
GO
--identity value auto-assigned
INSERT INTO TestTable VALUES(1);
GO
SET IDENTITY_INSERT dbo.TestTable ON;
GO
--explict identity value specified
INSERT INTO TestTable(ID, ExampleField) VALUES(11, 1);
GO
SET IDENTITY_INSERT dbo.TestTable OFF;
GO
--fails as expected because identity value cannot be specified with IDENTITY_INSERT OFF
INSERT INTO TestTable(ID, ExampleField) VALUES(11, 1);
GO
SET IDENTITY_INSERT dbo.TestTable ON;
GO
--fails as expected because identity value must be specified with IDENTITY_INSERT ON
INSERT INTO TestTable VALUES(1);
GO
关于sql-server - 如何处理具有 IDENTITY 列的表上的 INSTEAD OF 触发器的 IDENTITY_INSERT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50311611/
我有一个不允许换行的多行 EditText。现在,只要他们点击保存,我就会用一些空格替换返回。有什么办法可以用完成按钮替换屏幕上的输入按钮? (就像单行 EditText 一样) 我知道我仍然应该去掉
我有这段代码用于从长度为 k 的数组中查找 n 个组合: class Util { // Function to print all distinct combinations of leng
我有一个客户。 CREATE TABLE `customer` ( `cNic` VARCHAR(50) NOT NULL DEFAULT '', `cName` VARCHAR(10
有没有人有一个简单的例子来解释为什么人们想要使用 Oracle instead of trigger ? 最佳答案 我见过几种不同的场景 1) 您使用初始数据模型构建一个系统,并为应用程序提供一组 V
您会在我的 form 标记中看到,我正在使用 toLocaleString 在我的最终输出中放置一个分隔符。但是我想要一个空格而不是逗号。我怎样才能做到这一点? 现在,第三个输出中有一个逗号。但理想情
我正在尝试创建一个考虑历史的数据库(经验表明你总有一天会这样做)。 我在这里问过database-design-how-to-handle-the-archive-problem但没有比链接 here
我将伪元素 :after 应用于章节标题类,但由于某种原因它出现在行的顶部而不是行的下方(我正在尝试创建下划线)。 HTML:
在我的 MySQL 数据库中,我有字段 DECIMAL(23,5),所以小数点后有 5 位数字。现在,当我这样查询时: UPDATE my_table SET my_decimal_field = 1
我正在尝试验证一个字段以查看该值是整数还是数组。下面的规则检查值是否为整数 AND 数组。 'field' => "integer|array", 最佳答案 如果你想使用OR,你需要创建一个custo
我正在对构建在 SQL Server 2000 上的遗留应用程序进行一些调整,不用说我只想做绝对最少的事情,因为担心它可能会全部崩溃。 我有一个很大的用户表 tbUsers,带有一个用于 IsDele
我在 SQL Server 2008 R2 下遇到以下超时问题,而不是删除触发器。它似乎仅在许多(> 6 左右)CustomFieldOption 时发生s 在同一个事务中被删除。 CREATE TR
在我的办公室,我们无法使用git://urls连接到github。对于常规存储库,我们只需使用https://url,就可以了。 对于要点,似乎没有一种通过https://URL访问要点的方法。 顺便
有这样的 Zend 查询: $select = $this->_table ->select() ->where('title LIKE
此代码生成一个具有 2 个 Y 轴和 1 个 X 轴的 Highcharts : $('#main_chart').highcharts({ chart: { zoom
Please bear with me here. I know there are other answers such as: AngularJS: Service vs provider vs
我在表上使用 INSTEAD OF 插入触发器来设置该行的递增版本号,并将该行复制到第二个历史/审核表。 这些行已毫无问题地插入到两个表中。 但是,我无法将第一个表中的新身份返回给用户。 架构 CRE
我正在开发新软件时对现有数据库进行更改。还有相当多使用数据库的遗留软件需要继续工作,即我想维护现有的数据库表、过程等。 目前我有 table CREATE TABLE dbo.t_station (
使用 MSSQL2008。 我有两张 table 。 TableResource ------------- ID [bigint] Attribute1 [int] Attribute2 [int]
我们正在执行到 SQL Server 的数据库迁移,为了支持旧版应用程序,我们在 SQL Server 表上定义了 View ,这些 View 按照旧版应用程序的预期显示数据。 但是,当字段可能具有默
在 examples page当您搜索(CTRL+F)图片库并单击第一张图片时,您可以使用下一个/上一个箭头浏览此图片库。它们之间的动画是垂直的——图像垂直飞行。如何让它们水平飞行? 在我找到的帮助中
我是一名优秀的程序员,十分优秀!