在前一篇文章中介绍了如何使用TmssqlConnection连接mssql数据库,并进行数据库的增删改查,但是在执行存储过程时,发生了错误,存储过程中有使用临时表的插入,但是存储过程执行时返回了,列不允许null的警告,导致存储过程执行失败。
先说一下存储过程如何执行:
通过TSqlQuery sql中执行如下格式:
exec procedurename 参数
参数格式:
1、参数1,参数2,参数3 ...... 参数n
2、@参数名1=参数1,@参数名2=参数2......
参数可以直接在sql语句中设定好字符串拼接,也可以使用:paramname代替,这样可以通过sqlQuery的params参数进行赋值。
如果有返回值的参数,需要在后面加入 “OUTPUT”:比如 @输出参数x=:paramnamex OUTPUT,这样存储过程的返回值可以通过params参数取得.
再说一下,如何避免出现上面的错误,需要在执行存储过程前,通过TMsSqlconnection.executeDirect 执行以下两个语句:
'SET ANSI_NULL_DFLT_ON ON ' :使mssql在新建表的时候,默认允许列为空
'SET ANSI_PADDING ON' :提高mssql的字符处理的兼容性
经过以上设定后,再执行存储过程,可以正常执行了,正确的返回了数据集。
对了,存储过程的执行,如果有返回数据集,需要使用open,如果不需要返回数据集,使用execsql。