CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

存储过程如何执行SQL脚本?

楼主wea1978(川)2005-06-01 11:31:44 在 MS-SQL Server / 基础类 提问

----我用这个命令,不出错,没有执行到...  
  EXEC   master..xp_cmdshell   'osql   -S   wbserver   -U   admin   -P   x819hp24   -d   wb   -i   D:\data\newdata.sql'  
   
  -------------要怎样才可以在存储过程执行呢? 问题点数:100、回复次数:24Top

1 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-01 11:37:49 得分 0

不太明白。Top

2 楼zjcxc(邹建)回复于 2005-06-01 11:39:21 得分 0

返回的信息是什么?    
   
  确认D:\data\newdata.sql在你的sql服务器上,而且你的用户有足够的权限,而且脚本文件的内容是正确的.Top

3 楼duanduan1122(俺村俺帅!!!)回复于 2005-06-01 11:43:23 得分 15

create   proc   execsql  
  @server   varchar(20),  
  @user       varchar(20),  
  @pwd         varchar(20),  
  @db           varchar(20),  
  @path       varchar(120)  
  as  
  declare   @sql   varchar(500)  
  set   @sql='master..xp_cmdshell    
  '''osql   -S   '+@server+'   -U   '+@user+'   -P   '+pwd+'   -d   '+@db+'   -i   '+@path+'''''  
   
  exec(@sql)  
  Top

4 楼wea1978(川)回复于 2005-06-01 11:47:31 得分 0

没有返回...  
  就象执行正确一样...这个SQL脚本是用来建表和索引,触发器用的...在查询分析器里完全正确...  
   
  楼上大侠的可以用吗?谢谢了...还在测试中...Top

5 楼zjcxc(邹建)回复于 2005-06-01 11:49:03 得分 0

不会是你看错了什么地方吧?Top

6 楼wea1978(川)回复于 2005-06-01 11:49:03 得分 0

另外我的权限是最大的...可以执行任何操作,服务器上的文件也是自己复制进去的,也不会有问题...Top

7 楼wea1978(川)回复于 2005-06-01 15:04:24 得分 0

各位大侠帮忙看看...谢谢了!Top

8 楼cqdj(快乐的游民)回复于 2005-06-02 11:31:02 得分 5

D:\data\newdata.sql   好像时要在你的webserver上,是吧?检查一下.Top

9 楼wea1978(川)回复于 2005-06-02 12:07:57 得分 0

newdata.sql文件是在我的wbserver上面的...这点不会有问题...  
  现在只好在查询分析器里执行,执行也没有问题...Top

10 楼zjcxc(邹建)回复于 2005-06-02 14:06:00 得分 80

换台电脑去测试,如果没有问题,那就检查你的服务器.  
   
  也可以换个简单的脚本文件来测试.  
   
  为了避免脚本文件的影响,可以先测试直接执行sql语句的效果.  
  EXEC   master..xp_cmdshell   'osql   -S   wbserver   -U   admin   -P   x819hp24   -d   wb   -Q"create   table   tempdb.dbo.tb(id   int)"'Top

11 楼wea1978(川)回复于 2005-06-02 15:29:18 得分 0

显示错误:  
  实时错误'3709':  
  请求的操作需要OLE   DB会话对象,而当前提供程序不支持此对象。  
  Top

12 楼wea1978(川)回复于 2005-06-02 15:32:27 得分 0

哦...刚才的错误已消除...  
  但还是没有创建表...  
  create   table   tempdb.dbo.tb(id   int)Top

13 楼wea1978(川)回复于 2005-06-02 15:47:21 得分 0

zjcxc(邹建)   大侠的简单测试已成功...  
  是否说明我原来的:  
  EXEC   master..xp_cmdshell   'osql   -S   wbserver   -U   admin   -P   x819hp24   -d   wb   -i   D:\data\newdata.sql'   也没有问题呢?    
  Top

14 楼zjcxc(邹建)回复于 2005-06-02 15:53:15 得分 0

测试成功了,那就再试:  
   
  exec   master..xp_cmdshell   'echo   create   table   tempdb.dbo.tb(id   int)   >c:\a.sql'  
  exec   master..xp_cmdshell   'osql   -S   wbserver   -U   admin   -P   x819hp24   -d   wb   -i   c:\a.sql'  
   
  如果还是成功了,那么说明是你的脚本文件的问题.   如果不成功,给出错误信息.Top

15 楼wea1978(川)回复于 2005-06-02 16:03:51 得分 0

还是成功...  
  如果说SQL脚本有问题,那么怎么会可以在查询分析器上执行成功呢?我给出我的SQL脚本:  
  ---------------------------------创建明细---------------  
  declare   @日期参数   datetime,@new_table   nvarchar(20)  
    set   @日期参数   =   getdate()  
    set   @new_table='考勤明细资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
  IF   (Select   count(*)   from   sysobjects   where   name=     @new_table   and   type='u')   =   0  
      begin  
            exec('CREATE   TABLE   '+   @new_table   +   '(  
  [电脑工号]   [int]   NOT   NULL   ,  
  [日期]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,  
  [星期]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [上午上班时间]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [上午下班时间]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [下午上班时间]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [下午下班时间]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [晚上上班时间]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [晚上下班时间]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间1]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间2]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间3]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间4]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间5]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间6]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间7]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间8]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间9]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间10]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间11]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间12]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间13]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间14]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间15]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间16]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间17]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间18]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间19]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间20]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间21]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间22]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间23]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间24]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间25]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间26]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间27]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间28]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间29]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常打卡时间30]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [异常状态]   [int]   NULL   ,  
  [考勤生效]   [int]   NULL   ,  
  [生效人]   [char]   (20)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [生效时间]   [datetime]   NULL    
  )   ON   [PRIMARY]')  
  end  
  GO  
  declare   @日期参数   datetime,@new_table   nvarchar(20),@pktable   nvarchar(20)  
    set   @日期参数   =   getdate()  
    set   @new_table='考勤明细资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
    set   @pktable=   'PK_考勤明细资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
  exec('ALTER   TABLE   '+   @new_table   +'   WITH   NOCHECK   ADD    
  CONSTRAINT   '+   @pktable   +'   PRIMARY   KEY     CLUSTERED    
  (  
  [电脑工号],  
  [日期]  
  )     ON   [PRIMARY]   ')  
  GO  
  declare   @日期参数   datetime,@new_table   nvarchar(20),@pktable   nvarchar(20)  
    set   @日期参数   =   getdate()  
    set   @new_table='考勤明细资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
  exec('CREATE     UNIQUE     INDEX   [考勤明细资料索引]   ON   '+   @new_table   +'([电脑工号],   [日期])   ON   [PRIMARY]')  
  Go  
  ----------------------------------------创建工时---------------------  
  declare   @日期参数   datetime  
    set   @日期参数   =   getdate()  
      declare     @new_table     nvarchar(20)  
      set   @new_table='工时资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
  IF   (Select   count(*)   from   sysobjects   where   name=     @new_table   and   type='u')   =   0  
      begin  
            exec('       CREATE   TABLE   '   +   @new_table   +   '   (  
  [工时电脑工号]   [int]   NOT   NULL   ,  
  [工时日期]   [char]   (10)   COLLATE   Chinese_PRC_CI_AS   NOT   NULL   ,  
  [星期]   [int]   NULL   ,  
  [工时]   [int]   NULL   ,  
  [加班]   [int]   NULL   ,  
  [补时]   [int]   NULL   ,  
  [补加班]   [int]   NULL   ,  
  [迟到]   [int]   NULL   ,  
  [迟到时间]   [int]   NULL   ,  
  [早退]   [int]   NULL   ,  
  [早退时间]   [int]   NULL   ,  
  [加班迟到]   [int]   NULL   ,  
  [加班迟到时间]   [int]   NULL   ,  
  [休假]   [int]   NULL   ,  
  [休假时间]   [int]   NULL   ,  
  [补假]   [int]   NULL   ,  
  [补假时间]   [int]   NULL   ,  
  [请假]   [int]   NULL   ,  
  [请假时间]   [int]   NULL   ,  
  [旷工]   [int]   NULL   ,  
  [旷工时间]   [int]   NULL   ,  
  [备注]   [char]   (64)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [工时生效]   [int]   NULL   ,  
  [生效人]   [char]   (20)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [生效时间]   [datetime]   NULL    
  )   ON   [PRIMARY]')  
      end  
  Go  
   
   
   
  Top

16 楼wea1978(川)回复于 2005-06-02 16:04:23 得分 0

-------接上  
  declare   @日期参数   datetime  
    set   @日期参数   =getdate()  
          declare     @new_table     nvarchar(20)  
          declare     @PK_table   nvarchar(20)  
          set   @new_table='工时资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
      set     @PK_table='PK_工时资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
    exec('    
  ALTER   TABLE   '+   @new_table   +   '   WITH   NOCHECK   ADD    
  CONSTRAINT   '   +   @PK_table   +'   PRIMARY   KEY     CLUSTERED    
  (  
  [工时电脑工号],  
  [工时日期]  
  )     ON   [PRIMARY]   ')  
  GO  
  SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   ON    
  GO  
      declare   @日期参数   datetime  
    set   @日期参数   =   getdate()  
      declare     @update_table   nvarchar(20)  
      declare     @new_table     nvarchar(20)  
      declare     @All_table       nvarchar(20)    
      set   @update_table='添年工时资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
        set   @new_table='工时资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
          set   @All_table='年工时资料'+SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)  
  if   not   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N''+@update_table+'')    
  and   OBJECTPROPERTY(id,   N'IsTrigger')   =   1)  
      begin  
  exec('   CREATE   TRIGGER   '   +   @update_table   +   '      
            ON     '   +   @new_table   +   '            
            FOR   INSERT  
            AS  
  IF   EXISTS(SELECT   *   FROM   '+   @All_table   +'       INNER   JOIN     INSERTED    
  ON   '+   @All_table   +'.月工时电脑工号   =   INSERTED.工时电脑工号    
  AND   LTRIM(RTRIM('+   @All_table   +'.月工时日期))   =    
  SUBSTRING(RTRIM(LTRIM(INSERTED.工时日期)),1,6))  
            BEGIN  
    UPDATE     '+   @All_table   +'              
                    SET   月工时   =   月工时   +   INSERTED.工时,月加班   =   月加班   +   INSERTED.加班,月补时   =   月补时   +   INSERTED.补时,  
                      月补加班   =   月补加班   +   INSERTED.补加班,月迟到   =   月迟到   +INSERTED.迟到,  
                    月迟到时间   =   月迟到时间   +   INSERTED.迟到时间,月早退   =   月早退   +INSERTED.早退,月早退时间   =   月早退时间   +   INSERTED.早退时间,  
    月加班迟到   =   月加班迟到   +   INSERTED.加班迟到,月加班迟到时间   =   月加班迟到时间   +   INSERTED.加班迟到时间,    
                    月休假=月休假   +   inserted.休假   ,   月休假时间   =   月休假时间   +   inserted.休假时间,    
                    月补假=月补假   +   inserted.补假   ,   月补假时间   =   月补假时间   +   inserted.补假时间,月请假   =   月请假   +   inserted.请假,    
                    月请假时间   =   月请假时间   +   inserted.请假时间,   月旷工   =   月旷工   +   inserted.旷工,   月旷工时间=   inserted.旷工时间    
                    FROM   '+   @All_table   +'     INNER   JOIN     INSERTED   ON   '+   @All_table   +'.月工时电脑工号   =   INSERTED.工时电脑工号    
                  AND   LTRIM(RTRIM('+   @All_table   +'.月工时日期))   LIKE   SUBSTRING(RTRIM(LTRIM(INSERTED.工时日期)),1,6)  
          END  
  ELSE  
          BEGIN  
  INSERT   '+   @All_table   +'(月工时电脑工号,月工时日期,   月工时,   月加班,   月补时,月补加班,     月迟到,   月迟到时间,   月早退,   月早退时间,    
                  月加班迟到,   月加班迟到时间,   月休假,月休假时间,   月补假,   月补假时间,      
                    月请假,   月请假时间,   月旷工,月旷工时间,   备注,月底薪,   月工时工资,   月计件工资,   月加班工资,      
                    月加班补贴,月假日补贴,月请假扣,月旷工扣,月迟到扣,月应增工资,   月应扣工资,   月勤工奖,   月伙食费,   月综合费,  
                  月应发合计,计薪天数,假日天数,补星期假,补特殊假)  
  SELECT   工时电脑工号,SUBSTRING(RTRIM(LTRIM(工时日期)),1,6),     工时,   加班,   补时,补加班,     迟到,   迟到时间,   早退,   早退时间,    
                  加班迟到,   加班迟到时间,   0,0,0,0,请假,请假时间,旷工,旷工时间,备注,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0  
  FROM   INSERTED  
        END')  
                  declare   @datename   nvarchar(6)  
  set   @datename=SUBSTRING(CONVERT(CHAR,@日期参数,112),1,4)   +   SUBSTRING(CONVERT(CHAR,@日期参数,112),5,2)    
  insert   newtable   select   @datename  
  end    
  GO  
  SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   ON    
  GO  
  Top

17 楼wea1978(川)回复于 2005-06-02 16:06:46 得分 0

因为想一次将表+索引+触发器都创建...所在才会使用脚本...Top

18 楼zjcxc(邹建)回复于 2005-06-03 08:41:51 得分 0

你有脚本不全吧?   在我的电脑上没办法执行通过.   所以没办法帮你测试.Top

19 楼wea1978(川)回复于 2005-06-03 10:51:36 得分 0

但奇怪的就是在我的查询分析器可以成功执行...  
  存储过程又不能有多个Go...所以才会用到脚本...  
  不知道可不可以用其它替换的方法呢?Top

20 楼zjcxc(邹建)回复于 2005-06-03 10:54:15 得分 0

我的电脑上不能执行你的脚本,所以没办法测试.Top

21 楼zjcxc(邹建)回复于 2005-06-03 10:55:18 得分 0

个人觉得还是脚本的问题.Top

22 楼wea1978(川)回复于 2005-06-03 11:08:55 得分 0

谢谢     zjcxc(邹建)     大侠指点,  
  检查脚本中……Top

23 楼zjcxc(邹建)回复于 2005-06-03 11:12:43 得分 0

你的脚本有几段,逐段执行,看看到那一段的时候出错.Top

24 楼wea1978(川)回复于 2005-06-03 11:14:17 得分 0

谢谢提醒……Top

相关问题

  • 如何在Delphi中执行Sql server的脚本文件(*.sql)建立表及存储过程?100分
  • sql存储过程执行问题。(急)
  • 怎样在脚本中创建并执行存储过程?
  • 在存储过程中如何暂停脚本的执行?
  • SQL语句让存储过程生成SQL脚本!
  • 在Delphi中,用SQL脚本更新存储过程?
  • 多个*.SQL脚本需要执行,如何在存储过程内部实现?没有master.dbo.xp_cmdshell权限,有其他办法没有?
  • SQL Server的存储过程怎么执行sql语句
  • 如保通过程序把SQL存储过程导出,生成SQL脚本
  • 如何在SQL*PLUS中执行带参数的存储过程?

关键词

  • 脚本
  • 执行
  • 分析器
  • 文件
  • 查询
  • hp
  • xp
  • sql
  • wbserver
  • newdata

得分解答快速导航

  • 帖主:wea1978
  • duanduan1122
  • cqdj
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo