• 自动生成存储过程二


    下面的存储过程sp_GenUpdate就可以帮我生成更新数据的存储过程。

    调用sp_GenUpdate存储过程的代码:
    sp_GenUpdate 'Employees', 'INS_Employees'

    生成
    sp_GenUpdate存储过程代码:
    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

  • 相关阅读:
    Java中Comparable与Comparator的区别
    LeetCode[5] 最长的回文子串
    LeetCode[3] Longest Substring Without Repeating Characters
    LeetCode 7. Reverse Integer
    统计单词出现的次数
    System.arraycopy()和Arrays.copyOf()的区别
    SyncToy
    查看端口占用及进程号
    TCP协议
    python 的日志logging模块学习
  • 原文地址:https://www.cnblogs.com/yumianhu/p/3713004.html
Copyright © 2020-2023  润新知