我有table_1
通过以下声明从table_2
获取数据:
INSERT INTO database1.tbl_1 (idx, user_id, stasus_idx)
SELECT idx, user_id, stasus_idx
FROM database2.table_2
WHERE stasus_idx = 591
table_1
具有与table_2
完全相同的列结构,但开头有一个额外的列可提供唯一的ID
。所以table_1
列看起来像这样:
ID, idx, user_id, stasus_idx
我已经创建了INSTEAD OF TRIGGER
,如下所示:
CREATE TRIGGER trg_ID ON table_1
INSTEAD OF INSERT
AS
BEGIN
SET IDENTITY_INSERT table_1 ON
.
. -- trigger
.
SET IDENTITY_INSERT table_1 OFF
END
....为每一行插入新的唯一ID
,但id不能按预期工作。它只是插入 1记录并完成。我可以将所有行都提取到CURSOR中并逐个处理,但这样效率会非常低。
感谢您的帮助。
答案 0 :(得分:2)
也许序列可以解决您的问题。您可以使用以下语法轻松定义一个:
create sequence sequence_name as int start with 1 increment by 1;
请注意,默认类型为bigint
。并且序列似乎从最小值开始,而不是默认为1。
然后,您可以使用default
在表格中使用这些内容。这是一个例子:
create table t1 (
id int primary key default (next value for test),
id2 int identity unique,
val int
);
Here是一个简单的SQL小提琴,用来说明它们。我在评论中提到的文档似乎非常有用。
答案 1 :(得分:0)
如果您无法更改数据库以使用序列,那么您应该能够在没有触发器的情况下使用原始查询。只需在查询周围添加SET IDENTITY_INSERT
语句。
SET IDENTITY_INSERT database1.tbl_1 ON;
INSERT INTO database1.tbl_1 (ID, idx, user_id, stasus_idx )
SELECT ID, idx, user_id, stasus_idx FROM database2.table_2
WHERE stasus_idx = 591;
SET IDENTITY_INSERT database1.tbl_1 OFF;