将tSQLt测试添加到现有的生产产品中,因此我们无法更改表,约束等。 目前,所有约束都标记为"PK_dbo。违规类别",当它们应该像"PK_ViolationCategory"时
当我运行时:
EXEC tSQLt.NewTestClass 'AdHocReportFiltersTestConstraint';
GO
CREATE PROCEDURE [AdHocReportFiltersTestConstraint].[Setup]
AS
BEGIN
EXEC tSQLt.FakeTable 'dbo.AdHocReports'
END
GO
CREATE PROCEDURE [AdHocReportFiltersTestConstraint].[test_AdHocReportFilters_Constraint]
AS
BEGIN
DECLARE @Id uniqueidentifier = NEWID()
DECLARE @Name NVARCHAR(Max) = 'Test_Name'
DECLARE @Value NVARCHAR(Max) = 'Test_Value'
DECLARE @AdHocReport_ID uniqueidentifier = NEWID()
INSERT INTO dbo.AdHocReportFilters ([Id], [Name], [Value], [AdHocReport_Id])
VALUES (@Id, @Name, @Value, @AdHocReport_ID)
exec tSQLt.ApplyConstraint 'dbo.AdHocReports', 'PK_dbo.AdHocReportFilters';
END
EXEC tSQLt.RunTestClass 'AdHocReportFiltersTestConstraint';
GO
我收到错误,
(1 row affected)
[AdHocReportFiltersTestConstraint].[test_AdHocReportFilters_Constraint] failed:
(Error) The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_dbo.AdHocReportFilters_dbo.AdHocReports_AdHocReport_Id". The conflict occurred in
database "CR", table "dbo.tSQLt_tempobject_fbc9c8bf09e742929eccae914d5e440d",
column 'Id'.[16,0]{test_AdHocReportFilters_Constraint,11}
关于如何解决这个问题的任何想法?
一旦我开始工作,我将添加第二条记录以违反 PK 约束并捕获错误。
只是看你的代码,我看到你正在做以下事情:
- 伪造表dbo。AdHocReports
- 在表 dbo 中插入一行。AdHocReportFilters
- 应用名为"PK_dbo.AdHocReportFilters"到表dbo。AdHocReports
- 然后,您将尝试添加另一行来验证PK_dbo。AdHocReportFilters 约束
您收到的错误似乎表明您违反了AdHocReportFilters表上的外键 - 这是意料之中的,因为该表未被伪造。
从测试名称中不清楚您是在尝试验证主键还是外键的行为。
查看这些步骤,我认为您可能混淆了两个表,但是如果没有更详细的代码(即CREATE TABLE(语句,我很难进一步帮助您。
有两个表:
dbo.AdHocReports (Id,... (more columns))
dbo.AdHocReportFilters ([Id], [Name], [Value], [AdHocReport_Id] )
AdHocReportFilters.AdHocReport_Id 是表 dbo 的外键。引用 dbo.AdHocReports.Id 的 AdHocReportFilters
当您在表格AdHocReportFilters
中插入一行时,您应该确保AdHocReportFilters.AdHocReport_Id
是表格id column
dbo.AdHocReports
但是在您的SP中,@AdHocReport_ID
是NEWID()
,这当然是唯一的值,因此不在表dbo.AdHocReports.Id
解决方法,
禁用外键约束
ALTER TABLE dbo.AdHocReportFilters NOCHECK CONSTRAINT FK_dbo.AdHocReportFilters_dbo.AdHocReports_AdHocReport_Id