我正在尝试使用try-catch捕获SQL查询(而不是存储过程)中的错误。
由于某种原因,这无法处理我的错误,但我仍然得到:
消息213,级别16,状态1,第29行列名或提供的值数与表定义不匹配。
有什么帮助吗?
begin try create table #temp_hierarchy (temp_gl_number varchar(50) ,temp_store_location varchar(255) ,temp_store_key varchar(50) ,temp_serving_dc varchar(50) ,temp_exploris_db varchar(50) ,temp_dc_account varchar(50) ,temp_store_type varchar(50) ,temp_dvp_ops varchar(50) ,temp_rdo varchar(50) ,temp_team varchar(50) ,temp_dvp_sales varchar(50) ,temp_rds varchar(50) ,temp_closed varchar(50) ,temp_open_date varchar(50) ,temp_close_date varchar(50) ,temp_store_manager varchar(250) ,temp_sales_teammate varchar(250) ,temp_machine_shop varchar(50) ,temp_address varchar(250) ,temp_city varchar(50) ,temp_state varchar(50) ,temp_zip varchar(50) ,temp_phone varchar(50) ,temp_fax varchar(50)) insert into #temp_hierarchy select * from OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\SQL_DATA_REPORTING\8-31-11 Store Hierarchy.xlsx;HDR=YES', 'SELECT * FROM [Master List$]'); truncate table tbl_hierarchy insert into tbl_hierarchy select * from #temp_hierarchy where temp_gl_number is not null and temp_gl_number <> 'GLID' select @@ROWCOUNT + ' Records sucessfully imported' end try begin catch select 'ERROR: ' & ERROR_NUMBER() + '. Unable to import records, existing data was not lost.' end catch; go
您有一个编译时错误,无法在try-catch中捕获。
BooksOnline:
编译和语句级重新编译错误 如果错误在与TRY-ATCH构造相同的执行级别中发生,则有两种类型的错误将不会由TRY-ATCH处理: 编译错误,例如阻止批处理执行的语法错误。 在语句级重新编译期间发生的错误,例如由于延迟的名称解析而在编译后发生的对象名称解析错误。
编译和语句级重新编译错误
如果错误在与TRY-ATCH构造相同的执行级别中发生,则有两种类型的错误将不会由TRY-ATCH处理:
编译错误,例如阻止批处理执行的语法错误。
在语句级重新编译期间发生的错误,例如由于延迟的名称解析而在编译后发生的对象名称解析错误。