自动生成存储过程的脚本
如果一個表的字段非常的多的話,平時寫存儲過程,是不是很耗費(fèi)時間呢,盯著眼睛痛,有了自動生成代碼程序,只需F5一下就好了<( ̄︶ ̄)>
?
--自動生成存儲過程Update
--要使用的數(shù)據(jù)庫名
declare @DatabaseName varchar(100)
set @DatabaseName='Test'
--要使用的表名
declare @TableName varchar(100)
set @TableName='Profit'
--選出表的所有列名,列的數(shù)據(jù)類型,數(shù)據(jù)大小
declare TableCol Cursor For
SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.Columns c
INNER JOIN INFORMATION_SCHEMA.Tables t
?? ?? ON c.TABLE_NAME = t.TABLE_NAME
WHERE t.Table_Catalog = @DatabaseName
?? ?AND t.TABLE_TYPE = 'BASE TABLE' and t.TABLE_NAME=@TableName
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION
DECLARE @TableSchema varchar(100), @TableNameTemp varchar(100)
DECLARE @ColumnName varchar(100), @DataType varchar(30)
DECLARE @CharLength int
declare @ColumnNameCleaned varchar(100)
declare @IDCount int
set @IDCount=1
declare @UpdateUpperPart varchar(4000)
declare @UpdateLowerPart varchar(4000)
open TableCol
fetch next from TableCol into @TableSchema, @TableNameTemp,
?@ColumnName, @DataType, @CharLength
while @@FETCH_STATUS = 0
?BEGIN
?? ?set @ColumnNameCleaned = Replace(@ColumnName, ' ', '')
?? ?--遍歷到第一列字段的時候
?? ?if(@IDCount=1)
?? ?begin
?? ??? ?set @UpdateUpperPart = 'create procedure [dbo].[up_'+@TableNameTemp+'_update]'+CHAR(13)+
?? ??? ??? ?'@p_'+@ColumnNameCleaned+'? '+@DataType
?? ??? ?if @DataType? IN ('varchar', 'nvarchar', 'char', 'nchar')
?? ??? ?begin
?? ??? ??? ?set @UpdateUpperPart=@UpdateUpperPart+'('+CAST(@CharLength as varchar(12))+')'?? ??? ??? ??? ?
?? ??? ?end
?? ??? ?set @UpdateUpperPart= @UpdateUpperPart+CHAR(13)
?? ??? ?
?? ??? ?set @UpdateLowerPart='as'+CHAR(13)+
?? ??? ??? ?'update [dbo].['+@TableNameTemp+']'+CHAR(13)+
?? ??? ??? ?'set ['+@ColumnNameCleaned+']=@p_'+?? ?@ColumnNameCleaned+CHAR(13)?? ??? ??? ??? ?
?? ?end
?? ?else
?? ?begin
?? ??? ?set? @UpdateUpperPart=@UpdateUpperPart+',@p_'+@ColumnNameCleaned+'? '+
?? ??? ??? ??? ??? ?@DataType
?? ??? ?if @DataType? IN ('varchar', 'nvarchar', 'char', 'nchar')
?? ??? ?begin
?? ??? ??? ?set @UpdateUpperPart=@UpdateUpperPart+'('+CAST(@CharLength as varchar(12))+')'?? ??? ??? ??? ?
?? ??? ?end
?? ??? ?set @UpdateUpperPart= @UpdateUpperPart+CHAR(13)
?? ??? ?
?? ??? ?
?? ??? ?set? @UpdateLowerPart=@UpdateLowerPart+',['+@ColumnNameCleaned+']=@p_'+
?? ??? ??? ??? ??? ?@ColumnNameCleaned+CHAR(13)
?? ?end
?? ?
?? ?set @IDCount=@IDCount+1
?? ?fetch next from TableCol into @TableSchema, @TableNameTemp,
?? ??? ?@ColumnName, @DataType, @CharLength
end
close TableCol
DEALLOCATE TableCol
print @UpdateUpperPart+@UpdateLowerPart
?
--自動生成存儲過程Insert
--要使用的數(shù)據(jù)庫名
declare @DatabaseName varchar(100)
set @DatabaseName='Test'
--要使用的表名
declare @TableName varchar(100)
set @TableName='Profit'
--選出表的所有列名,列的數(shù)據(jù)類型,數(shù)據(jù)大小
declare TableCol Cursor For
SELECT c.TABLE_SCHEMA, c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.Columns c
INNER JOIN INFORMATION_SCHEMA.Tables t
?? ?? ON c.TABLE_NAME = t.TABLE_NAME
WHERE t.Table_Catalog = @DatabaseName
?? ?AND t.TABLE_TYPE = 'BASE TABLE' and t.TABLE_NAME=@TableName
ORDER BY c.TABLE_NAME, c.ORDINAL_POSITION
DECLARE @TableSchema varchar(100), @TableNameTemp varchar(100)
DECLARE @ColumnName varchar(100), @DataType varchar(30)
DECLARE @CharLength int
declare @ColumnNameCleaned varchar(100)
declare @IDCount int
set @IDCount=1
declare @InsertUpperPart varchar(4000)?? ?--前半部分 create+參數(shù)
declare @InsertMiddlePart varchar(4000)?? ?--中間部分 as+insert
declare @InsertLowerPart varchar(4000)?? ?--后半部分 values
open TableCol
fetch next from TableCol into @TableSchema, @TableNameTemp,
?@ColumnName, @DataType, @CharLength
while @@FETCH_STATUS = 0
?BEGIN
?? ?set @ColumnNameCleaned = Replace(@ColumnName, ' ', '')
?? ?--遍歷到第一列字段的時候
?? ?if(@IDCount=1)
?? ?begin
?? ??? ?set @InsertUpperPart = 'create procedure [dbo].[up_'+@TableNameTemp+'_Insert]'+CHAR(13)+
?? ??? ??? ?'@p_'+@ColumnNameCleaned+'? '+@DataType
?? ??? ?if @DataType? IN ('varchar', 'nvarchar', 'char', 'nchar')
?? ??? ?begin
?? ??? ??? ?set @InsertUpperPart=@InsertUpperPart+'('+CAST(@CharLength as varchar(12))+')'?? ??? ??? ??? ?
?? ??? ?end
?? ??? ?set @InsertUpperPart= @InsertUpperPart+CHAR(13)
?? ??? ?
?? ??? ?set @InsertMiddlePart = 'as'+CHAR(13)+
?? ??? ??? ?'insert into [dbo].['+@TableNameTemp+']'+CHAR(13)+
?? ??? ??? ?'(['+@ColumnNameCleaned+']'+CHAR(13)
?? ??? ?
?? ??? ?set @InsertLowerPart='values'+CHAR(13)+
?? ??? ??? ?'(@p_'+@ColumnNameCleaned+CHAR(13)?? ??? ??? ??? ?
?? ?end
?? ?else
?? ?begin
?? ??? ?set? @InsertUpperPart=@InsertUpperPart+',@p_'+@ColumnNameCleaned+'? '+
?? ??? ??? ??? ??? ?@DataType
?? ??? ?if @DataType? IN ('varchar', 'nvarchar', 'char', 'nchar')
?? ??? ?begin
?? ??? ??? ?set @InsertUpperPart=@InsertUpperPart+'('+CAST(@CharLength as varchar(12))+')'?? ??? ??? ??? ?
?? ??? ?end
?? ??? ?set @InsertUpperPart= @InsertUpperPart+CHAR(13)
?? ??? ?
?? ??? ?set @InsertMiddlePart=@InsertMiddlePart+',['+@ColumnNameCleaned+']'+CHAR(13)
?? ??? ?
?? ??? ?set?? ?@InsertLowerPart=@InsertLowerPart+',@p_'+@ColumnNameCleaned+CHAR(13)?? ??? ??? ??? ?
?? ?end
?? ?
?? ?set @IDCount=@IDCount+1
?? ?fetch next from TableCol into @TableSchema, @TableNameTemp,
?? ??? ?@ColumnName, @DataType, @CharLength
end
close TableCol
DEALLOCATE TableCol
set @InsertMiddlePart=@InsertMiddlePart+')'+CHAR(13)
set @InsertLowerPart=@InsertLowerPart+')'
print @InsertUpperPart+@InsertMiddlePart+@InsertLowerPart
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/meiwlongblog/archive/2013/02/22/2922356.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的自动生成存储过程的脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharePoint 2010 使用自定
- 下一篇: struts1.x心得1--struts