我想写一个脚本,执行的时候先调出数据库中原有存储过程,替换修改的那一部分,然后执行。
  例:create proc abc
      as 
      select xm,xb from name  我想把过程中的xm替换为xm as 姓名,然后执行脚本  因为用户比较多,有些存储过程是针对单个用户进行调整的,如果统一执行新的脚本怕影响用户的特殊调整,能修改他原有存储过程的一部分,然后执行就方便多了?
  

解决方案 »

  1.   

    啥意思?create proc abc
      as  
      select xm as 姓名,xb from name有何不可?
      

  2.   

    要是前台程序调用,你可以不用字段名来获取,根据字段顺序获取。
    getParameter(1)
    getParameter(2)这样?
      

  3.   

     
    /*******************************************************************
    修改远程服务器的存储过程 DoAlterProc使用方法:
    1、本地有表 dbase 存放远程服务器的信息 -- 查看记录
    select * from 数据库名.dbo.dbase    dbip                         dbname   dbuser dbpwd     lx          bz
    ---------------------------- -------- ------ --------- ----------- ------------------------------
    192.168.0.1\实例名  数据库名  SA     1 1 服务器
    192.168.0.2    数据库名  SA     1 2 同事服务器
    -- 插入记录  use 数据库名
    insert dbase 
    select '192.168.0.2', -- 服务器+实例名
    '数据库名', -- 数据库名
    'sa', -- 用户名
    '1', -- 用户密码
     2, -- 类型(1:服务器,2:同事,可以进一步具体化)
    '' -- 备注
    -- 更新记录 2、D盘下有一个TXT 文档,存放最新的存储过程信息测试用例:EXEC DoAlterProc 1,'PSZY'*******************************************************************/CREATE PROC [dbo].[DoAlterProc]
    @lx int   -- 服务器类型  
     
    AS  -- 修改
    DECLARE @cmd nvarchar(MAX);DECLARE @TEXT NVARCHAR;
    SET @cmd = ''; SELECT
    @cmd = @cmd + 'EXEC xp_cmdshell N''sqlcmd -S '+dbip+' -i"D:\aa.txt"  -d '+dbname+' -U '+dbuser+case when isnull(dbpwd,'')=''  then '' else ' -P ' end +dbpwd+''';'+CHAR(13)+CHAR(10)
    FROM dbase
    where lx=@lx; print @cmd
    EXEC(@cmd)
     
    go