运行一段SQL语句并返回值
2008-07-08 12:30
183 查看
我们经常要拼SQL语句,往往又想将拼成的SQL语句返回值到语句外面用。这时候,就需要用到SQL Server中自带的SP_EXECUTESQL了:
---If Over Bill Case----------------------------------------------------------------------------------------------------------
declare @strInVoicetable nvarchar(1000),@strOrdertable nvarchar(1000),@Inv_NO nvarchar(1000)
set @Inv_NO = '9010002999'
set @strInVoicetable = 'fi_invoice_detail_2008'
set @strOrdertable = 'order_detail_2008'
DECLARE @OverSql NVARCHAR(4000),@OverParameter NVARCHAR(1000)
declare @IsOverBill int
Select @OverSql = '
select @iIsOverBill =
case when (Convert(numeric(19,2),det.Med_Cost * fim.inv_exch) > Convert(numeric(19,2),(odet.UnitCost + odet.ProductionCost)))
or (Convert(numeric(19,2),det.AC1 * fim.inv_exch) > Convert(numeric(19,2),odet.AC1Amount))
then 1
else
case when @iIsOverBill = 1 then 1 else 0 end
end
from fi_invoice_master fim
left join ' + @strInVoicetable + ' det on fim.invoice_master_id = det.invoice_master_id
left join order_master ma on det.OrderNo=ma.OrderNo and det.OrderVersion=ma.OrderVersion
left join ' + @strOrdertable + ' odet on det.spotcode=odet.spotcode and det.order_detail_id = odet.order_detail_id
where fim.inv_no in(' + @Inv_NO + ')
',
@OverParameter = N'@iIsOverBill int OUTPUT'
EXEC SP_EXECUTESQL @OverSql,@OverParameter,@IsOverBill OUTPUT
select @IsOverBill
------------------------------------------------------------------------------------------------------------------------------
我是数据库笨笨。
---If Over Bill Case----------------------------------------------------------------------------------------------------------
declare @strInVoicetable nvarchar(1000),@strOrdertable nvarchar(1000),@Inv_NO nvarchar(1000)
set @Inv_NO = '9010002999'
set @strInVoicetable = 'fi_invoice_detail_2008'
set @strOrdertable = 'order_detail_2008'
DECLARE @OverSql NVARCHAR(4000),@OverParameter NVARCHAR(1000)
declare @IsOverBill int
Select @OverSql = '
select @iIsOverBill =
case when (Convert(numeric(19,2),det.Med_Cost * fim.inv_exch) > Convert(numeric(19,2),(odet.UnitCost + odet.ProductionCost)))
or (Convert(numeric(19,2),det.AC1 * fim.inv_exch) > Convert(numeric(19,2),odet.AC1Amount))
then 1
else
case when @iIsOverBill = 1 then 1 else 0 end
end
from fi_invoice_master fim
left join ' + @strInVoicetable + ' det on fim.invoice_master_id = det.invoice_master_id
left join order_master ma on det.OrderNo=ma.OrderNo and det.OrderVersion=ma.OrderVersion
left join ' + @strOrdertable + ' odet on det.spotcode=odet.spotcode and det.order_detail_id = odet.order_detail_id
where fim.inv_no in(' + @Inv_NO + ')
',
@OverParameter = N'@iIsOverBill int OUTPUT'
EXEC SP_EXECUTESQL @OverSql,@OverParameter,@IsOverBill OUTPUT
select @IsOverBill
------------------------------------------------------------------------------------------------------------------------------
我是数据库笨笨。
相关文章推荐
- ibatis运行的SQL语句的输出——通过配置log4j
- 如何用一段SQL语句递归找到一个目录下的所有子目录...
- iBATIS.net获取运行时sql语句
- 【复习】 bash shell 运行mysql oracle sql 语句
- PB 数据库连接以及sql语句运行信息返回代码解释大全
- 关于group by的一段SQl语句——Oracle
- iBATIS.net获取运行时sql语句
- discuz!X2回复帖子运行代码和SQL语句
- 获取动态SQL查询语句返回值(sp_executesql)
- MySQL 动态sql语句运行 用时间做表名
- SQL Server中存储过程比直接运行SQL语句慢的原因
- sql 语句 插入数据 返回值问题
- SQL Server中存储过程比直接运行SQL语句慢的原因
- Oracle中SQL语句运行过程的深度解析
- mysql 实时显示当前运行的sql语句
- bash shell 运行mysql oracle sql 语句
- oracle 查看运行过的SQL语句
- magento中打印运行的SQL语句
- sql语句中选取限制字段的不同可能会对运行效率产生质的影响
- Hive:把一段包含中文的sql脚本粘贴到beeline client运行中文乱码