tSQLt不会将命名错误的约束(PK_dbo…)应用于假表
将tSQLt测试添加到现有生产产品中,因此我们无法更改表、约束等。当前,所有约束都标记为“PK_dbo.ViolationCategory”,而它们应该标记为“PK_ViolationCategory” 当我跑步时:tSQLt不会将命名错误的约束(PK_dbo…)应用于假表,tsql,tsqlt,Tsql,Tsqlt,将tSQLt测试添加到现有生产产品中,因此我们无法更改表、约束等。当前,所有约束都标记为“PK_dbo.ViolationCategory”,而它们应该标记为“PK_ViolationCategory” 当我跑步时: EXEC tSQLt.NewTestClass 'AdHocReportFiltersTestConstraint'; GO CREATE PROCEDURE [AdHocReportFiltersTestConstraint].[Setup] A
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的PK约束应用于表dbo.AdHocReports 然后,您将尝试添加另一行以验证PK_dbo.AdHocReportFilters约束 您得到的错误似乎表明您违反了AdHocReportFilters表上的外键-这是预期的,因为该表没有被伪造 测试名称不清楚您是在尝试验证主键还是外键的行为 查看这些步骤,我认为您可能混淆了这两个表,但如果没有更详细的代码(即创建表语句),我很难进一步帮助您。有两个表:
dbo.AdHocReports (Id,... (more columns))
dbo.AdHocReportFilters ([Id], [Name], [Value], [AdHocReport_Id] )
AdHocReportFilters.AdHocReports\u Id是表dbo.AdHocReportFilters引用dbo.AdHocReports.Id的外键
在表AdHocReportFilters中插入插入行时,应确保AdHocReportFilters.AdHocReport_Id是表dbo.AdHocReports中的Id列
但是在您的SP中,@AdHocReport_ID是NEWID,这当然是一个唯一的值,因此不在表dbo.AdHocReports.ID中
围绕
禁用外键约束
你想做什么?对不起。补充澄清。。。一旦我开始工作,我将添加第二条记录来违反PK约束并捕获错误
ALTER TABLE dbo.AdHocReportFilters NOCHECK CONSTRAINT FK_dbo.AdHocReportFilters_dbo.AdHocReports_AdHocReport_Id