動態SQL中返回數值

2022-02-08 22:34:27 字數 2866 閱讀 6956

最近在做乙個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)+'')

endelse

begin

set @execsql=@paypalusersql+@paypalsql --不存在使用者資訊

endif(len(@websql)>0)--執行web語句

begin

exec sp_common_websiteorder_addinfo @websql, @webusersql, @webwhere ,@webstockflag

endif(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)+'')--必須替換 否則會報錯誤說必須宣告標量變數

endelse

begin

set @execebaysql=@ebayusersql+@ebaysql --不存在ebayuid

endset @execebaysql= replace(@execebaysql,'@00',dbo.getordernum(@ebaystockflag))--呼叫函式替換訂單編號

exec (@execebaysql)

endexec(@execsql)

end try

begin catch

if(@@trancount>0)

rollback transaction mytrans

end catch

if(@@trancount>0)

begin

commit transaction mytrans

endelse begin

rollback transaction mytrans

end

從動態SQL中返回值

declare transactorid int set transactorid 0 print transactorid execsp execute sqln select transactorid 68 n transactoridint transactorid execsp execut...

dpkg l 命令返回數值

dpkg l 每條記錄對應乙個軟體包,每條記錄的第一,二,三個字元是軟體包的狀態標識,後邊依此時軟體包名稱,版本號,和簡述 第乙個字元為,期望值 包括如下狀態 u 狀態未知 意味軟體包未安裝,並且使用者也未發出安裝請求 i 使用者請求安裝軟體包 r 使用者請求解除安裝軟體包 p 使用者請求清楚軟體包...

sql數值求和

實際 select sum shuliang sum danjia sum jine as 單價 sum danjia as 單價,sum jine as 金額 from ang dbo myshucai 1 對列求和可以使用聚合函式sum,例如 select sum 金額 as 合計 from 表...