动态SQL中返回数值的实现代码
前端之家收集整理的这篇文章主要介绍了
动态SQL中返回数值的实现代码,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<div class="codetitle"><a style="CURSOR: pointer" data="86175" class="copybut" id="copybut86175" onclick="doCopy('code86175')"> 代码如下:
<div class="codebody" id="code86175">
ALTER proc [dbo].[sp_common_paypal_AddInfo]
(
@paypal
sql varchar(max),--不包含
用户表的paypal
sql语句
@paypaluser
sql varchar(max),--paypal
用户表的
sql语句
@ebay
sql varchar(max),--不包含
用户表的ebay
sql语句
@ebayuser
sql varchar(max),--ebay的
用户表
sql语句
@paypaluserwhere varchar(max),--paypal
用户表
查询ID语句
@ebayuserwhere varchar(max),--ebay
用户表
查询ID语句
@web
sql varchar(max),--web除去
用户表的
sql语句
@webuser
sql varchar(max),--web
用户表的
sql语句
@webwhere varchar(max),--web
用户表where之后的
sql语句
@ebaystockflag varchar(10),--ebay订单号
生成规则
@webstockflag varchar(10)--web订单号
生成规则
)
as
set xact_abort on
begin transaction mytrans
begin try
declare @uid int--根据语句查找
用户ID
declare @exec
sql varchar(max)
declare @ebayuid int--根据语句查找
用户ID
declare @execebay
sql nvarchar(max)--用sp_execute
sql 字段类型必须是nvarchar
declare @
sql nvarchar(max)--用sp_execute
sql 字段类型必须是nvarchar
set @
sql='select @a=ID from tb_TransactionCustomer where '+ convert(varchar(8000),@paypaluserwhere)
exec sp_execute
sql @
sql,N'@a int output',@uid output
set @uid =ISNULL(@uid,0)--如果不这样判断
获取的值可能为null用len()
获取不到长度
--存在paypal
用户id
if(@uid>0)
begin
set @exec
sql=@paypal
sql-- 存在
用户信息
set @exec
sql= REPLACE(@exec
sql,'@uid',''+convert(varchar,@uid)+'')
end
else
begin
set @exec
sql=@paypaluser
sql+@paypal
sql --不存在
用户信息
end
if(LEN(@web
sql)>0)--执行web语句
begin
exec sp_common_WebSiteorder_AddInfo @web
sql,@webuser
sql,@webwhere,@webstockflag
end
if(LEN(@ebay
sql)>0)--执行ebay语句
begin
--exec sp_common_Ebay_AddInfo @ebay
sql,@ebayuser
sql,@ebayuserwhere,@ebaystockflag
SELECT
FROM tb_EbayOrder WITH (TABLOCKX)
SELECT FROM tb_EbayOrderList WITH (TABLOCKX)
SELECT * FROM tb_EbayOrderUserInfo WITH (TABLOCKX)
set @
sql='select @b=ID from tb_EbayOrderUserInfo where '+ convert(varchar(8000),@ebayuserwhere)
exec sp_execute
sql @
sql,N'@b int output',@ebayuid output
set @ebayuid =ISNULL(@ebayuid,0)
if(@ebayuid>0)
begin
set @execebay
sql=@ebay
sql--存在ebayuid
set @execebay
sql= REPLACE(@execebay
sql,'@ebayuid',@ebayuid)+'')--必须替换 否则会报
错误说必须声明标量变量
end
else
begin
set @execebay
sql=@ebayuser
sql+@ebay
sql --不存在ebayuid
end
set @execebay
sql= REPLACE(@execebay
sql,'@00',dbo.GetOrderNum(@ebaystockflag))--
调用函数替换订单编号
exec (@execebay
sql)
end
exec(@exec
sql)
end try
begin catch
if(@@TRANCOUNT>0)
rollback transaction mytrans
end catch
if(@@TRANCOUNT>0)
begin
commit transaction mytrans
end
else begin
rollback transaction mytrans
end