即使我在我的程序中删除,也不能因主键双重性而多次插入表中。你能帮帮我们吗?
BEGIN
IF @operace = 'v'
DELETE
FROM lcs.vztahy_formulare
WHERE lcs.vztahy_formulare.zamid IN (
SELECT crossTable.uzivatel
FROM #tempCrossTable crossTable
WHERE crossTable.uzivatel = lcs.vztahy_formulare.zamid
AND crossTable.cislo_vztahu = lcs.vztahy_formulare.cislo_vztahu
AND crossTable.cislo_poradace = lcs.vztahy_formulare.cislo_poradace
AND crossTable.strana = lcs.vztahy_formulare.strana
AND lcs.vztahy_formulare.type = 2
)
IF @operace = 'v'
INSERT INTO lcs.vztahy_formulare
SELECT crossTable.uzivatel
,crossTable.cislo_poradace
,crossTable.vztazeneVztahy
,0
,crossTable.strana
,1
,0
,2
FROM #tempCrosstable crossTable
END
这是表结构
CREATE TABLE lcs.vztahy_formulare (
zamid INT NOT NULL
,cislo_poradace INT NOT NULL
,cislo_vztahu INT NOT NULL
,poradi INT NOT NULL
,strana CHAR(1) NOT NULL
,relation_volume_type INT NOT NULL
,poradi_archiv INT NOT NULL
,type INT NOT NULL
,CONSTRAINT [PK_vztahy_formulare_1__30] PRIMARY KEY NONCLUSTERED (
[zamid] ASC
,[cislo_poradace] ASC
,[cislo_vztahu] ASC
,[strana] ASC
) WITH (
PAD_INDEX = OFF
,STATISTICS_NORECOMPUTE = OFF
,IGNORE_DUP_KEY = OFF
,ALLOW_ROW_LOCKS = ON
,ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [lcs].[vztahy_formulare] ADD CONSTRAINT [DF__vztahy_fo__relat__7917DB30] DEFAULT((1))
FOR [relation_volume_type]
GO
ALTER TABLE [lcs].[vztahy_formulare] ADD CONSTRAINT [DF__vztahy_fo__porad__7A0BFF69] DEFAULT((0))
FOR [poradi_archiv]
GO
ALTER TABLE [lcs].[vztahy_formulare] ADD CONSTRAINT [DF__vztahy_for__type__3E77CEFD] DEFAULT((1))
FOR [type]
GO
lcs.vztahy_formulare。 zamid 等于#tempCrossTable。 uzivatel
lcs.vztahy_formulare。 cislo_vztahu 等于#tempCrossTable。 cislo_vztahu
lcs.vztahy_formulare。 cislo_poradace 等于#tempCrossTable。 cislo_poradace
lcs.vztahy_formulare。 strana 等于#tempCrossTable。 strana
从表lcs.vztahy_formulare
中选择数据SELECT *
FROM lcs.vztahy_formulare f
WHERE f.zamid = 51048910
返回 data from lcs.vztahy_formulare(link on screenshot)
它返回3行(类型2)并且它是正确的。所以删除应该使用type = 2。
如果我想再次运行此插入,我必须通过简单的删除语句手动删除它。
DELETE
FROM lcs.vztahy_formulare
WHERE lcs.vztah_formulare.zamid = 51048910
答案 0 :(得分:0)
似乎您在insert语句中使用了错误的字段:
INSERT INTO lcs.vztahy_formulare
SELECT crossTable.uzivatel
,crossTable.cislo_poradace
,crossTable.cislo_vztahu
,0
,crossTable.strana
,1
,0
,2
FROM #tempCrosstable crossTable