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

wea1978 2005-06-01 11:31:44
----我用这个命令,不出错,没有执行到...
EXEC master..xp_cmdshell 'osql -S wbserver -U admin -P x819hp24 -d wb -i D:\data\newdata.sql'

-------------要怎样才可以在存储过程执行呢?
...全文
712 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
wea1978 2005-06-03
  • 打赏
  • 举报
回复
谢谢提醒……
zjcxc 元老 2005-06-03
  • 打赏
  • 举报
回复
你的脚本有几段,逐段执行,看看到那一段的时候出错.
wea1978 2005-06-03
  • 打赏
  • 举报
回复
谢谢 zjcxc(邹建) 大侠指点,
检查脚本中……
zjcxc 元老 2005-06-03
  • 打赏
  • 举报
回复
个人觉得还是脚本的问题.
zjcxc 元老 2005-06-03
  • 打赏
  • 举报
回复
我的电脑上不能执行你的脚本,所以没办法测试.
wea1978 2005-06-03
  • 打赏
  • 举报
回复
但奇怪的就是在我的查询分析器可以成功执行...
存储过程又不能有多个Go...所以才会用到脚本...
不知道可不可以用其它替换的方法呢?
zjcxc 元老 2005-06-03
  • 打赏
  • 举报
回复
你有脚本不全吧? 在我的电脑上没办法执行通过. 所以没办法帮你测试.
wea1978 2005-06-02
  • 打赏
  • 举报
回复
newdata.sql文件是在我的wbserver上面的...这点不会有问题...
现在只好在查询分析器里执行,执行也没有问题...
cqdj 2005-06-02
  • 打赏
  • 举报
回复
D:\data\newdata.sql 好像时要在你的webserver上,是吧?检查一下.
wea1978 2005-06-02
  • 打赏
  • 举报
回复
因为想一次将表+索引+触发器都创建...所在才会使用脚本...
wea1978 2005-06-02
  • 打赏
  • 举报
回复
-------接上
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
wea1978 2005-06-02
  • 打赏
  • 举报
回复
还是成功...
如果说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



zjcxc 元老 2005-06-02
  • 打赏
  • 举报
回复
测试成功了,那就再试:

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'

如果还是成功了,那么说明是你的脚本文件的问题. 如果不成功,给出错误信息.
wea1978 2005-06-02
  • 打赏
  • 举报
回复
zjcxc(邹建) 大侠的简单测试已成功...
是否说明我原来的:
EXEC master..xp_cmdshell 'osql -S wbserver -U admin -P x819hp24 -d wb -i D:\data\newdata.sql' 也没有问题呢?
wea1978 2005-06-02
  • 打赏
  • 举报
回复
哦...刚才的错误已消除...
但还是没有创建表...
create table tempdb.dbo.tb(id int)
wea1978 2005-06-02
  • 打赏
  • 举报
回复
显示错误:
实时错误'3709':
请求的操作需要OLE DB会话对象,而当前提供程序不支持此对象。
zjcxc 元老 2005-06-02
  • 打赏
  • 举报
回复
换台电脑去测试,如果没有问题,那就检查你的服务器.

也可以换个简单的脚本文件来测试.

为了避免脚本文件的影响,可以先测试直接执行sql语句的效果.
EXEC master..xp_cmdshell 'osql -S wbserver -U admin -P x819hp24 -d wb -Q"create table tempdb.dbo.tb(id int)"'
zjcxc 元老 2005-06-01
  • 打赏
  • 举报
回复
不会是你看错了什么地方吧?
wea1978 2005-06-01
  • 打赏
  • 举报
回复
另外我的权限是最大的...可以执行任何操作,服务器上的文件也是自己复制进去的,也不会有问题...
wea1978 2005-06-01
  • 打赏
  • 举报
回复
没有返回...
就象执行正确一样...这个SQL脚本是用来建表和索引,触发器用的...在查询分析器里完全正确...

楼上大侠的可以用吗?谢谢了...还在测试中...
加载更多回复(4)

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧