sqlserver存储过程临时表、exec、返回值、php调用时注意用法
存储过程中:
exec pro 这种语法执行存储过程
exec(@xxx) 这种执行一条普通sql语句
如果要返回值,需要声明 @tpl varchar(100) OUTPUT 这样一个入参
比如执行查询
set @sql = N'SELECT * from '+@tablename exec(@sql)
临时表创建方式:
create table #TmpTable ( tableName varchar(100) NOT NULL )
如果一个再存储过程中调用另一个存储过程,并且另一个存储过程有个未知字段得返回值,可以先临时把返回数据存到临时表
insert into #TmpTable exec proce 'xxxx','xxxx','xxxx','xxxx','','','','','',''
php如果要调用,例如laravel,存储过程有返回值,直接调用会报错:
The active result for the query contains no fields
解决方式:
执行存储过程之前先执行 SET NOCOUNT ON,例如:
$tmpTable = $DB->select("SET NOCOUNT ON;EXEC getXxxx '1' ");
(参考:php - "The active result contains no fields" using PDO with MS SQL - Stack Overflow)