背景: 一个SP中,插入临时表的语句被错误的注释掉,虽然如此,执行SP应当报错,
但在SSIS中执行该SP却成功了,导致了我们没有得到正确的结果,却又没收到错误信息.
先建一个存储过程
CREATE PROC sp_test_error_level AS BEGIN SELECT GETDATE() AS col --INTO #temp_test FROM items UPDATE #temp_test SET col = GETDATE() END go EXEC sp_test_error_level
(2 個資料列受到影響) 訊息 208,層級 16,狀態 0,程序 sp_test_error_level,行 8 無效的物件名稱 '#temp_test'。
可以看到在SSMS中执行时报错,
但是我们放到SSIS中执行却执行成功了
再来修改下SP
ALTER PROC sp_test_error_level AS BEGIN -- SELECT GETDATE() AS col -- INTO #temp_test -- FROM items UPDATE #temp_test SET col = GETDATE() END GO EXEC sp_test_error_level
訊息 208,層級 16,狀態 0,程序 sp_test_error_level,行 8 無效的物件名稱 '#temp_test'。
执行仍然报错,但是这时候SSIS也正常报错了
区别在哪里呢?
第一个SP执行时在报错前返回了一个提示
(2 個資料列受到影響)
我猜测SSIS中执行SP时拿到第一个返回提示后认定其成功了,而实际上数据库中执行该SP却因为第二个返回错误回滚了
最后删除测试sp
DROP PROC sp_test_error_level