在做乙個功能時,要求引數是動態傳入並且有引數可以動態傳出,字串動態組成的sql以前只是知道 用execute去執行,今 天發現sp_executesql這個是可以達成這個目 的。
alter procedure [dbo].[slmformateexportcenterfields]
-- add the parameters for the stored procedure here
@tmp varchar(max),
@fields nvarchar(max) output
asbegin
-- set nocount on added to prevent extra result sets from
-- interfering with select statements.
set nocount on;
--declare @tmp varchar(max)
--set @tmp = 'sanow,orgfeecode,orgname,frcode,frname,paydatetime,humancategory,empcount,sss47,sss91,payyear,paymonth,orgsystemid,refno1,refno2,salarytype'
declare @sqldy nvarchar(max)
set @fields = ''
set @sqldy = '
declare @itemno varchar(20), @itemname varchar(50)
declare a cursor for
select itemno, itemname from ehr3.dbo.e9slmuploadcenteritems where forexport = 1 order by sort1
open a
fetch next from a
into @itemno, @itemname
while @@fetch_status = 0
begin
if charindex(@itemno, @tmp,0) > 0
begin
set @fields = @fields + @itemno + '' as '' + ''''''''+ @itemname + '''''''' + '',''
endfetch next from a
into @itemno, @itemname
endclose a
deallocate a'
exec sp_executesql @sqldy, n'@tmp varchar(max),@fields nvarchar(max) output', @tmp, @fields output
set @fields = substring(@fields,0, len(@fields))
return
end
動態儲存過程 sp executesql介紹和使用
execute相信大家都用的用熟了,簡寫為exec,除了用來執行儲存過程,一般都用來執行動態sql sp executesql,sql2005中引入的新的系統儲存過程,也是用來處理動態sql的,如 exec sp executesql sql,n count int out,id varchar 2...
使用sp executesql動態給表加資料。
今天想盡辦法來實現如何使用動態sql返回的資料集。偶然間發現乙個可行的方法。不知是否有通用性。但是在我的測試環境裡可以執行。放到 裡也能執行。使用的資料庫是 mssql 2005 declare t table sku varchar 20 sp executesql需要nvarchar的。decl...
使用sp executesql動態給表加資料。
今天想盡辦法來實現如何使用動態sql返回的資料集。偶然間發現乙個可行的方法。不知是否有通用性。但是在我的測試環境裡可以執行。放到 裡也能執行。使用的資料庫是 mssql 2005 declare t table sku varchar 20 sp executesql需要nvarchar的。decl...