在今天的培训考试过程中,我提出一个扩展题,要求对提交的sql进行语法校验.
其实这个题很简单,根本不需要用正则表达式去做语法分析,可以直接使用sql server自带的功能.
不多说,上代码.
alter proc sp_checksql
@sql varchar(8000),
@Error varchar(max)='' output
as
begin
set nocount on
BEGIN TRY
set @sql='SET parseonly on;'+@sql
exec(@sql)
exec ('SET parseonly off;')
END TRY
BEGIN CATCH
set @Error='语法校验失败'+char(10)
+isnull(error_message(),'')+char(10)
+'异常发生于第'+convert(varchar(10),isnull(error_line(),0))+'行'
END CATCH
END
核心就在于SET parseonly on选项,开启这个选项相当于点SSMS工具栏中的分析按钮.