自动生成对表进行插入和更新的存储过程的存储过程数据库教程 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    插入|存储过程

    我找到了两个存储过程,能自动生成对一个数据表的插入和更新的存储过程,现在奉献给大家!

    插入:

    Create procedure sp_GenInsert

    @TableName varchar(130),

    @ProcedureName varchar(130)

    as

    set nocount on

    declare @maxcol int,

    @TableID int

    set @TableID = object_id(@TableName)

    select @MaxCol = max(colorder)

    from syscolumns

    where id = @TableID

    select 'Create Procedure ' + rtrim(@ProcedureName) as type,0 as colorder into #TempProc

    union

    select convert(char(35),'@' + syscolumns.name)

    + rtrim(systypes.name)

    + case when rtrim(systypes.name) in ('binary','char','nchar','nvarchar','varbinary','varchar') then '(' + rtrim(convert(char(4),syscolumns.length)) + ')'

    when rtrim(systypes.name) not in ('binary','char','nchar','nvarchar','varbinary','varchar') then ' '

    end

    + case when colorder < @maxcol then ','

    when colorder = @maxcol then ' '

    end

    as type,

    colorder

    from syscolumns

    join systypes on syscolumns.xtype = systypes.xtype

    where id = @TableID and systypes.name <> 'sysname'

    union

    select 'AS',@maxcol + 1 as colorder

    union

    select 'INSERT INTO ' + @TableName,@maxcol + 2 as colorder

    union

    select '(',@maxcol + 3 as colorder

    union

    select syscolumns.name

    + case when colorder < @maxcol then ','

    when colorder = @maxcol then ' '

    end

    as type,

    colorder + @maxcol + 3 as colorder

    from syscolumns

    join systypes on syscolumns.xtype = systypes.xtype

    where id = @TableID and systypes.name <> 'sysname'

    union

    select ')',(2 * @maxcol) + 4 as colorder

    union

    select 'VALUES',(2 * @maxcol) + 5 as colorder

    union

    select '(',(2 * @maxcol) + 6 as colorder

    union

    select '@' + syscolumns.name

    + case when colorder < @maxcol then ','

    when colorder = @maxcol then ' '

    end

    as type,

    colorder + (2 * @maxcol + 6) as colorder

    from syscolumns

    join systypes on syscolumns.xtype = systypes.xtype

    where id = @TableID and systypes.name <> 'sysname'

    union

    select ')',(3 * @maxcol) + 7 as colorder

    order by colorder

    select type from #tempproc order by colorder

    更新:

    Create procedure sp_GenUpdate

    @TableName varchar(130),

    @PrimaryKey varchar(130),

    @ProcedureName varchar(130)

    as

    set nocount on

    declare @maxcol int,

    @TableID int

    set @TableID = object_id(@TableName)

    select @MaxCol = max(colorder)

    from syscolumns

    where id = @TableID

    select 'Create Procedure ' + rtrim(@ProcedureName) as type,0 as colorder into #TempProc

    union

    select convert(char(35),'@' + syscolumns.name)

    + rtrim(systypes.name)

    + case when rtrim(systypes.name) in ('binary','char','nchar','nvarchar','varbinary','varchar') then '(' + rtrim(convert(char(4),syscolumns.length)) + ')'

    when rtrim(systypes.name) not in ('binary','char','nchar','nvarchar','varbinary','varchar') then ' '

    end

    + case when colorder < @maxcol then ','

    when colorder = @maxcol then ' '

    end

    as type,

    colorder

    from syscolumns

    join systypes on syscolumns.xtype = systypes.xtype

    where id = @TableID and systypes.name <> 'sysname'

    union

    select 'AS',@maxcol + 1 as colorder

    union

    select 'UPDATE ' + @TableName,@maxcol + 2 as colorder

    union

    select 'SET',@maxcol + 3 as colorder

    union

    select syscolumns.name + ' = @' + syscolumns.name

    + case when colorder < @maxcol then ','

    when colorder = @maxcol then ' '

    end

    as type,

    colorder + @maxcol + 3 as colorder

    from syscolumns

    join systypes on syscolumns.xtype = systypes.xtype

    where id = @TableID and syscolumns.name <> @PrimaryKey and systypes.name <> 'sysname'

    union

    select 'WHERE ' + @PrimaryKey + ' = @' + @PrimaryKey,(2 * @maxcol) + 4 as colorder

    order by colorder

    select type from #tempproc order by colorder

    drop table #tempproc

最新文章