2013-02-19 32 views
2
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 

然後繼續在調用過程後填充#Actual和#Expected。 它返回的錯誤是:更新或插入視圖或函數'dbo.viewWithIssues'失敗,因爲它包含派生或常量字段。tSQLt.FakeTable似乎不適用於具有常量/派生字段的視圖

有誰知道如何解決這個問題?

回答

6

問題是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 
+0

完美!謝謝! – zeroshi 2013-02-19 19:42:51

+0

這只是爲我節省了假裝和填充15桌! – squillman 2017-03-02 16:42:40

相關問題