以下代码段失败并显示错误:
OUTPUT INTO子句的目标表'dbo.forn'不能位于(主键,外键)关系的任何一侧.找到参考约束'FK_forn_prim'."
我只能通过禁用外键约束来使用输出?如何才能做到这一点?
IF OBJECT_ID ('dbo.forn') IS NOT NULL
begin
alter table dbo.forn drop constraint FK_forn_prim
DROP TABLE dbo.forn;
end
IF OBJECT_ID ('dbo.prim') IS NOT NULL
DROP TABLE dbo.prim;
go
CREATE TABLE dbo.prim (c1 int PRIMARY KEY);
CREATE TABLE dbo.forn (c1 int CONSTRAINT FK_forn_prim FOREIGN KEY (c1) REFERENCES dbo.prim(c1));
go
INSERT INTO dbo.prim
OUTPUT inserted.c1 INTO dbo.forn
SELECT 1;
Run Code Online (Sandbox Code Playgroud)
无法保证将更改应用于表的顺序与将行插入到输出表或表变量的顺序相对应。
基于此,存在许多限制,其中就是您在上面遇到的限制,但如果您想要的只是在第二个表中记录插入的值,我不明白为什么您需要您定义的外键关系多于。
如果您确实需要外键关系,您可以使用这样的触发器来完成同样的事情。
IF OBJECT_ID ('dbo.forn') IS NOT NULL
begin
alter table dbo.forn drop constraint FK_forn_prim
DROP TABLE dbo.forn;
end
IF OBJECT_ID ('dbo.prim') IS NOT NULL
DROP TABLE dbo.prim;
go
CREATE TABLE dbo.prim (c1 int PRIMARY KEY);
CREATE TABLE dbo.forn (c1 int CONSTRAINT FK_forn_prim FOREIGN KEY (c1) REFERENCES dbo.prim(c1));
go
CREATE TRIGGER InsertRecord
ON dbo.Prim
AFTER Insert
AS
BEGIN
SET NOCOUNT ON;
Insert into dbo.forn Select * from inserted;
END
GO
INSERT INTO dbo.prim SELECT 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6901 次 |
| 最近记录: |