动态SQL中返回数值的实现代码

 更新时间:2011年12月20日 12:27:20   作者:  
最近在做一个paypal抓取数据的程序,由于所有字段和paypal之间存在对应映射的关系,所以所有的sql语句必须得拼接传到存储过程里去执行
复制代码 代码如下:

ALTER proc [dbo].[sp_common_paypal_AddInfo]
(
@paypalsql varchar(max),--不包含用户表的paypalsql语句
@paypalusersql varchar(max),--paypal用户表的sql语句
@ebaysql varchar(max),--不包含用户表的ebaysql语句
@ebayusersql varchar(max),--ebay的用户表sql语句
@paypaluserwhere varchar(max),--paypal用户表查询ID语句
@ebayuserwhere varchar(max),--ebay用户表查询ID语句
@websql varchar(max),--web除去用户表的sql语句
@webusersql 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 @execsql varchar(max)
declare @ebayuid int--根据语句查找用户ID
declare @execebaysql nvarchar(max)--用sp_executesql 字段类型必须是nvarchar
declare @sql nvarchar(max)--用sp_executesql 字段类型必须是nvarchar
set @sql='select @a=ID from tb_TransactionCustomer where '+ convert(varchar(8000),@paypaluserwhere)
exec sp_executesql @sql,N'@a int output',@uid output
set @uid =ISNULL(@uid,0)--如果不这样判断 获取的值可能为null用len()获取不到长度
--存在paypal用户id
if(@uid>0)
begin
set @execsql=@paypalsql-- 存在用户信息
set @execsql= REPLACE(@execsql,'@uid',''+convert(varchar,@uid)+'')
end
else
begin
set @execsql=@paypalusersql+@paypalsql --不存在用户信息
end
if(LEN(@websql)>0)--执行web语句
begin
exec sp_common_WebSiteorder_AddInfo @websql, @webusersql, @webwhere ,@webstockflag
end
if(LEN(@ebaysql)>0)--执行ebay语句
begin
--exec sp_common_Ebay_AddInfo @ebaysql, @ebayusersql, @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_executesql @sql,N'@b int output',@ebayuid output
set @ebayuid =ISNULL(@ebayuid,0)
if(@ebayuid>0)
begin
set @execebaysql=@ebaysql--存在ebayuid
set @execebaysql= REPLACE(@execebaysql,'@ebayuid',''+convert(varchar,@ebayuid)+'')--必须替换 否则会报错误说必须声明标量变量
end
else
begin
set @execebaysql=@ebayusersql+@ebaysql --不存在ebayuid
end
set @execebaysql= REPLACE(@execebaysql,'@00',dbo.GetOrderNum(@ebaystockflag))--调用函数替换订单编号
exec (@execebaysql)
end
exec(@execsql)
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

相关文章

  • sqlserver下将数据库记录的列记录转换成行记录的方法

    sqlserver下将数据库记录的列记录转换成行记录的方法

    sqlserver下将数据库记录的列记录转换成行记录的方法分享,需要的朋友可以参考下。
    2011-07-07
  • MySQL 多表查询实现分析

    MySQL 多表查询实现分析

    在一个数据库中,可能存在多个表,这些表都是相互关联的。
    2011-06-06
  • MSSQL存储过程的功能和用法详解

    MSSQL存储过程的功能和用法详解

    Microsoft SQL Server(MSSQL)是一个关系型数据库管理系统,它支持各种数据操作和查询功能,其中,存储过程是MSSQL中非常重要的一个功能,在这个章节中,我们将详细介绍MSSQL存储过程的功能和用法
    2023-12-12
  • Sqlserver创建用户并授权的实现步骤

    Sqlserver创建用户并授权的实现步骤

    这篇文章主要介绍了Sqlserver创建用户并授权的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 解析:清除SQL被注入恶意病毒代码的语句

    解析:清除SQL被注入恶意病毒代码的语句

    本篇文章是对清除SQL被注入恶意病毒代码的语句进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法

    SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法

    本环境是SQL Server 2005 Standard Version 64-bit 和 SQL Server 2008 Standard Version 64-bit 双实例同时安装在一个
    Windows Server 2008 Standard Version 64-bit OS上
    2010-04-04
  • mssql 两种数据插入方式

    mssql 两种数据插入方式

    下面那种不太常见的插入方法。
    2009-05-05
  • SQL 注入式攻击的本质

    SQL 注入式攻击的本质

    SQL 注入式攻击,又是注入式攻击,没想到2008年这个老掉牙的东西又出来搅风搅雨,更没想到的是这么老掉牙的东西居然还能跑出来搅风搅雨,而且造成了如此大的破坏
    2008-12-12
  • mysql基础知识扫盲

    mysql基础知识扫盲

    本文主要介绍关于mysql的一些非常基础的知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • 解析React 中的Virtual DOM

    解析React 中的Virtual DOM

    React在前端界一直很流行,而且学起来也不是很难,只需要学会JSX、理解State和Props,然后就可以愉快的玩耍了,但想要成为React的专家你还需要对React有一些更深入的理解,对React  Virtual DOM相关知识感兴趣的朋友一起看看吧
    2022-01-01

最新评论