Sql 试试看Catch Can';t形手柄转换台
为什么我不能处理alter表Sql 试试看Catch Can';t形手柄转换台,sql,sql-server,sql-server-2008,try-catch,Sql,Sql Server,Sql Server 2008,Try Catch,为什么我不能处理alter表 Begin Try alter table nyork add [Qtr] varchar(20) End Try Begin Catch Print 'Column already exist' End Catch' 因为其中一个是transact-sql命令(try-catch),另一个是DDL语句 在执行alter语句之前,最好先查询该列是否存在 要使用MSSQL执行此操作,请参见 特别是你的案子 IF COL_LENGTH('nyork', 'Qtr')
Begin Try
alter table nyork add [Qtr] varchar(20)
End Try
Begin Catch
Print 'Column already exist'
End Catch'
因为其中一个是transact-sql命令(try-catch),另一个是DDL语句 在执行alter语句之前,最好先查询该列是否存在 要使用MSSQL执行此操作,请参见 特别是你的案子
IF COL_LENGTH('nyork', 'Qtr') IS NULL
BEGIN
alter table nyork
add [Qtr] varchar(20)
END
因为其中一个是transact-sql命令(try-catch),另一个是DDL语句 在执行alter语句之前,最好先查询该列是否存在 要使用MSSQL执行此操作,请参见 特别是你的案子
IF COL_LENGTH('nyork', 'Qtr') IS NULL
BEGIN
alter table nyork
add [Qtr] varchar(20)
END
你不能做这样的事。TRY…CATCH只能处理运行时错误。只要列不存在,脚本就会运行,但如果列已经存在,脚本就不会运行。对象的名称解析在编译时完成。因此,SQL Server将始终在开始执行任何操作之前识别缺少的列。因此,您不能用动态SQL做这样的事情。您不能做这样的事情。TRY…CATCH只能处理运行时错误。只要列不存在,脚本就会运行,但如果列已经存在,脚本就不会运行。对象的名称解析在编译时完成。因此,SQL Server将始终在开始执行任何操作之前识别缺少的列。由于这个原因,您不能用动态SQL做这样的事情。您可以用exec('alter goes here')包装它。然后catch将catch您可以使用exec('alter goes here')将其包装起来。然后catch将catch问谷歌,而不是我。。。“try-catch-alter-table”的第一个结果=可能与Ask Google重复,而不是我。。。“try-catch-alter-table”的第一个结果=的可能重复项