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 ...