tSQLt.FakeTable似乎不适用于具有常量/派生字段的视图

zer*_*shi 5 sql tsqlt

exec tSQLt.SetFakeViewOn 'dbo.viewWithIssues';
GO
CREATE PROCEDURE    TestChanges.[Test Data]
AS
BEGIN
...

exec tSQLt.FakeTable 'dbo.viewWithIssues', @identity=1, @ComputedColumns=1, @Defaults=1;
INSERT INTO dbo.viewWithIssues (clock_id, IsTerminated)
VALUES  ('1111', '0'), ('2222', '1'), ('3333', '1')

...
END
GO
exec tSQLt.SetFakeViewOff 'dbo.viewWithIssues';
GO
Run Code Online (Sandbox Code Playgroud)

然后在调用过程后继续填充#Actual和#Expected.它返回的错误是:更新或插入视图或函数'dbo.viewWithIssues'失败,因为它包含派生或常量字段.

有谁知道怎么解决这个问题?

Seb*_*ine 13

问题是SQL Server在编译时捕获了这个,因此永远不会执行FakeTable.这就是SetFakeViewOn应该捕获的,但它目前无法可靠地工作.现在没有真正干净的方法,然后将插入和更新放入动态SQL:

CREATE PROCEDURE    TestChanges.[Test Data]
AS
BEGIN
...

exec tSQLt.FakeTable 'dbo.viewWithIssues', @identity=1, @ComputedColumns=1, @Defaults=1;
EXEC('INSERT INTO dbo.viewWithIssues (clock_id, IsTerminated)'+
'VALUES  (''1111'', ''0''), (''2222'', ''1''), (''3333'', ''1'');');

...
END
Run Code Online (Sandbox Code Playgroud)