查詢引數儲存過程

2021-05-25 10:05:54 字數 4261 閱讀 7237

set ansi_nulls on

set quoted_identifier on

go--名  稱:sql**生成器

--功  能:生成單錶的insert,update,語句,變數定義語句;程式預設第乙個列為主鍵;減少開發者輸入的時間

--exec getsql 'ord_tdcontract',3

alter                 procedure [dbo].[getsql]

@tablename varchar(255), --表名

@sqltype  int ,  --1插入sql;2更新sql;3變數定義;4儲存過程變數定義,5簡單格式的查詢語句;6生成初始化資料的語句;7生成賦值語句,8帶中文別名的查詢

@para  varchar(100)='',

@strmessage  varchar(4000)=null output

asdeclare @strsql1 varchar(8000)

declare @strsql2 varchar(8000)

declare @tid int

declare @i int

declare @cnum int

declare @cname varchar(100)

declare @var varchar(100)

declare @datatype varchar(100)

declare @introwcount int

declare @strnull varchar(10)

declare @xtype int

set @i=1

set @strsql2=''

set @strsql1=''

if @sqltype=1

begin

set @strsql1='insert into '+@tablename

set @strsql2='

select '

endif @sqltype=2

set @strsql1='update '+@tablename+' set '

if @sqltype in (5,7,8)

set @strsql1='select '

set @tid=object_id(@tablename )

select @introwcount=count(*) from syscolumns where id=@tid

declare authors_cursor cursor for select name,dbo.bf_getbasetype(xtype,prec,xprec,xscale) ,xtype

from dbo.syscolumns where id=@tid order by colid

open authors_cursor

fetch next from authors_cursor into @cname, @datatype,@xtype

while @@fetch_status = 0

begin

if @sqltype=1

begin

set @strsql1=@strsql1+case @i when 1 then '('+@cname when @introwcount then ','+@cname+')' else ','+@cname end

set @strsql2=@strsql2+'@'+@cname+case @i when @introwcount then '' else ',' end

endif @sqltype=2

begin

if @i=1  

set @strsql2=@strsql2+'   where '+@cname+'='+'@'+@cname+'  --'+dbo.bf_getcolprop(@tablename,@cname)

else

begin  

set @strsql1=@strsql1+@cname+'='+'@'+@cname+case @i when @introwcount then '' else ',' end

set @strsql1=@strsql1+' --'+dbo.bf_getcolprop(@tablename,@cname)+'

'   --換行

endend

if @sqltype=3

set @strsql1=@strsql1+'declare '+'@'+@cname+'

'+@datatype+' --'+dbo.bf_getcolprop(@tablename,@cname)+ '

'if @sqltype=4

set @strsql1=@strsql1+'@'+@cname+'  '+@datatype+ ','+'  --'+dbo.bf_getcolprop(@tablename,@cname)+'

'if @sqltype=5

set @strsql1=@strsql1+case @i when 1 then @cname when @introwcount then ','+@cname+ ' from '+@tablename   else ','+@cname end

if @sqltype=6

begin

if @xtype in (61)

set  @strnull='1990-01-01'

if @xtype in (62,56,108)

set @strnull='0'

if @xtype in (175,167)

set @strnull=''

set @strsql1=@strsql1+case @i when 1 then 'select '+'''insert into '+@tablename +' select ''''''+ convert(varchar(1000),isnull('+@cname+','''+@strnull+'''))'

when @introwcount then +'+'''''',''''''+convert(varchar(1000),isnull('+@cname+','''+@strnull+'''))' +'+'''''''' from '+@tablename

else '+'''''',''''''' +'+ convert(varchar(1000),isnull('+@cname+','''+@strnull+'''))' end

endif @sqltype=7

begin

set @strsql1=@strsql1 '+@cname+',''''))' else @cname end +case @i when @introwcount then ' from '+@tablename else ',' end

endif @sqltype=8

begin

set @strsql1=@strsql1+case @i when 1 then @cname+' '+dbo.bf_getcolprop(@tablename,@cname)

when @introwcount then ','+@cname+' '+dbo.bf_getcolprop(@tablename,@cname)+ ' from '+@tablename

else ','+@cname+' '+dbo.bf_getcolprop(@tablename,@cname) end

endset @i=@i+1

fetch next from authors_cursor  into @cname, @datatype,@xtype

endclose authors_cursor

deallocate authors_cursor

print @strsql1

print @strsql2

set @strmessage=@strsql1+'

'+@strsql2

if @sqltype=6

begin

if @para<>''

set @strmessage=@strmessage+' where '+@para

exec (@strmessage)

endif @sqltype=9

begin

select 'truncate table '+name+'

'+'update xs_systemcoding set maxcode=0 where codingobject='''+name+'''' from dbo.sysobjects where name like @tablename+'%' and type='u'

end

mysql儲存過程動態引數查詢

1 動態sql,即動態引數 在儲存過程中,想要直接用表名變數做引數,動態執行sql,不能直接寫 12 3456 7createprocedure tablenamechar 20 begin select fromtablename end mysql 不支援表名作為變數,這樣會直接將變數名 tab...

ACCESS中的儲存過程 引數查詢

access 的 mdb mde 中存在類似儲存過程得概念 建立時也可以使用 ddl 語句的 create procedure 語句建立 但是叫引數查詢,並且乙個引數查詢只支援一條 jet sql 語句,因而 jet sql 不存在程式流控制語句,所有的程式流控制都交由 vba 控制。也就是說 t ...

查詢儲存過程

1.oracle中下面這麼寫 按名查詢儲存過程 select from user objects where object type procedure and object name like upper p 按內容查詢儲存過程 select from all source where type ...