我在SQL Server 2012中创建一些表的查询如下:
app.use(expressjwt({credentialsRequired: true, secret: config.TOKEN_SECRET, requestProperty: 'user'}).unless({path: config.PUBLIC_URLs}));
app.use(function(err, req, res, next) {
if(err.name === 'UnauthorizedError') {
res.status(err.status).send({message:err.message});
logger.error(err);
return;
}
next();
});
,错误是
介绍FOREIGN KEY约束'FK__Poll_Vote__PollA__5A3A55A2' 表'Poll_Vote_Table'可能导致循环或多个级联路径。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他 FOREIGN KEY约束。 我怎么能解决这个问题
答案 0 :(得分:1)
他们有很多方法可以解决您的问题。我只提出两个解决方案:
1-最简单的一个:将表Poll_Vote_Table更改为2表,一个用于问题,一个用于答案。
2-使用触发器而不是删除/更新。它实际上是你想要的,但请考虑解决方案1.现在使用触发器的代码(for reference):
(我只是说明问题部分。对于答案,它是相同的。)
首先,您必须重新创建您的FK,如下所示(删除后):
ALTER TABLE [dbo].[Poll_Vote_Table] WITH CHECK
ADD CONSTRAINT [FK_Vote_Question] FOREIGN KEY([PollQuestionId])
REFERENCES [dbo].[Poll_Question_Table] ([PollQuestionId])
然后你需要创建触发器:
CREATE TRIGGER [DELETE_Question_Vote]
ON dbo.[Poll_Question_Table]
INSTEAD OF DELETE
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [Poll_Vote_Table] WHERE PollQuestionId IN (SELECT PollQuestionId FROM DELETED)
DELETE FROM [Poll_Question_Table] WHERE PollQuestionId IN (SELECT PollQuestionId FROM DELETED)
END
GO
更新部分通常没用,所以我不会写它但它与DELETE基本相同。