利用儲存過程動態建立字段

2021-08-22 06:50:18 字數 4527 閱讀 2277

--生產中我們至少有乙個訂單表,乙個生產進度表,如何將訂單表與生產進度表合成一張表呢,以下是乙個例子,這種方法可以在儲存過程中實現,亦可放在客戶端實現

create procedure [dbo].[processplanform]--加工進度計畫安排表

@sqlqualification varchar(1000),@maxjdsl int--sql條件,最大進度數量

asdeclare @mysql varchar(8000)--sql條件

declare @inpcolums varchar(1000)--被插入字段列表

set @inpcolums=''

declare @outcolums1 varchar(2000)--插入值1--序號

set @outcolums1=''

declare @outcolums2 varchar(2000)--插入值2--計畫開始

set @outcolums2=''

declare @outcolums3 varchar(2000)--插入值3--計畫日期

set @outcolums3=''

declare @outcolums4 varchar(2000)--插入值4--接件日期

set @outcolums4=''

declare @outcolums5 varchar(2000)--插入值5---完成日期

set @outcolums5=''

declare @outconst varchar(200)--輸出列表常量

declare @fildlist varchar(1000)--欄位列表

set @fildlist=''

set @outconst='序號,客戶,訂單編號,品名,材質,成品尺寸,數量,預交期,'

declare @xh int

set @xh=1

set @mysql='

--建立臨時表

declare @mytemp table (myid decimal(18,0) identity (1,1) not null,序號 varchar(11) null,客戶 varchar(5) null,訂單編號 varchar(30) null,品名 varchar(30) null , 材質 varchar(15) null,成品尺寸 varchar(18) null,數量 int null,預交期 datetime null ,工序 varchar(20) null'

while @xh<=@maxjdsl

begin

--修改表結構

if @fildlist=''

set @fildlist=',工序'+convert(varchar(2),@xh) +' varchar(20) null'

else

set @fildlist=@fildlist+',工序'+convert(varchar(2),@xh) +' varchar(20) null'

--set @mysql=@mysql+'alter table #mytemp add 工序'+convert(varchar(2),@xh)+' varchar(20) null'+char(13)--記錄新增欄位名列表

--第一次插入值--工序

if @outcolums1=''

set @outcolums1='dbo.findscjdrecno1(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

else

set @outcolums1=@outcolums1+',dbo.findscjdrecno1(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

--第二次插入值列表--計畫開始

if @outcolums2=''

set @outcolums2='dbo.findscjdrecno2(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

else

set @outcolums2=@outcolums2+',dbo.findscjdrecno2(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

--第三次插入值列表--計畫完成

if @outcolums3=''

set @outcolums3='dbo.findscjdrecno3(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

else

set @outcolums3=@outcolums3+',dbo.findscjdrecno3(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

--第四次插入值列表--接件日期

if @outcolums4=''

set @outcolums4='dbo.findscjdrecno4(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

else

set @outcolums4=@outcolums4+',dbo.findscjdrecno4(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

--第五次插入值列表--完成日期

if @outcolums5=''

set @outcolums5='dbo.findscjdrecno5(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

else

set @outcolums5=@outcolums5+',dbo.findscjdrecno5(序號,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)

--被插入字段列表

if @inpcolums=''

set @inpcolums='工序'+convert(varchar(2),@xh)

else

set @inpcolums=@inpcolums+',工序'+convert(varchar(2),@xh)

set @xh=@xh+1

endset @mysql=@mysql+@fildlist+')'

set @outcolums1='insert into @mytemp ('+@outconst+'工序,'+@inpcolums+') select '+@outconst+'''工序'' 工序 ,'+@outcolums1+' from ywdd where '+@sqlqualification--第一條插入語句

set @outcolums2='insert into @mytemp ('+@outconst+'工序,'+@inpcolums+') select 序號,null 客戶,null 訂單編號,null 品名,null 材質,null 成品尺寸,null 數量,null 預交期,''計畫開始'' 工序 ,'+@outcolums2+' from ywdd where '+@sqlqualification--第二條插入語句

set @outcolums3='insert into @mytemp ('+@outconst+'工序,'+@inpcolums+') select 序號,null 客戶,null 訂單編號,null 品名,null 材質,null 成品尺寸,null 數量,null 預交期,''計畫完成'' 工序 ,'+@outcolums3+' from ywdd where '+@sqlqualification--第三條插入語句

set @outcolums4='insert into @mytemp ('+@outconst+'工序,'+@inpcolums+') select 序號,null 客戶,null 訂單編號,null 品名,null 材質,null 成品尺寸,null 數量,null 預交期,''接件日期'' 工序 ,'+@outcolums4+' from ywdd where '+@sqlqualification--第四條插入語句

set @outcolums5='insert into @mytemp ('+@outconst+'工序,'+@inpcolums+') select 序號,null 客戶,null 訂單編號,null 品名,null 材質,null 成品尺寸,null 數量,null 預交期,''完成日期'' 工序 ,'+@outcolums5+' from ywdd where '+@sqlqualification--第五條插入語句

set @mysql=@mysql+char(13)+@outcolums1+char(13)+@outcolums2+char(13)+@outcolums3+char(13)+@outcolums4+char(13)+@outcolums5+char(13)

set @mysql=@mysql+'select '+@outconst+'工序,'+@inpcolums+' from @mytemp order by 序號,myid'

exec (@mysql)

go

PLSQL 儲存過程動態建立表

1 sqlplus登入 sqlplus又叫sql plus,是oracle資料庫操作最重要的工具,它既可以編輯sql語句,也可以編輯和除錯pl sql的程式。在 開始 的 執行 中敲入 cmd 在dos裡面輸入 sqlplus nolog 再回車,接著輸入 conn sys wengyupeng o...

建立儲存過程

execute pro book 當你執行該儲存過程時,所有包括在其中的sql語句都會執行,在上面的例子中,會返回所有在forum表中的記錄。當在批處理中的第乙個語句是呼叫儲存過程時,你並不需要使用execute語句。你可以簡單地提供儲存過程的名稱來執行儲存過程。比如在isql w中,可以象下面所示...

建立儲存過程

create procedure dbo procgetdata days int asbegin set nocount on added to prevent extra result sets from interfering with select statements.set nocoun...