社区
MS-SQL Server
帖子详情
存储过程如何执行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
打赏
收藏
存储过程如何执行SQL脚本?
----我用这个命令,不出错,没有执行到... EXEC master..xp_cmdshell 'osql -S wbserver -U admin -P x819hp24 -d wb -i D:\data\newdata.sql' -------------要怎样才可以在存储过程执行呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
C#获取
SQL
server数据库
存储过程
脚本
,可重复
执行
C#获取
SQL
server数据库
存储过程
脚本
,可重复
执行
.用于给数据库升级的打升级包的时候,十分方便
SQL
Server客户端工具(WPF,开源)
VS2010 WPF开发的
SQL
Server客户端工具,可以完美操作远程数据库,包括查看所有数据表、视图、
存储过程
、自定义函数,导出各种
脚本
。完全开源。
数据库
执行
SQL
语句跟踪
不管你是刚学习软件开发的初学者,还是在IT职场打拼多年的职场老鸟,都免不了要同各种数据库打交道,你可能会碰到以下几个问题:1、感觉自己写的
sql
语句没有错,但是
执行
结果总是不对;2、某个功能
执行
的语句知道有...
MS
SQL
数据库查看器
功能简介: 、数据库基本对象的查看(库、表、主键、过程、函数、触发器、游标、视图等) ...、
存储过程
脚本
、过程参数列表 、数据库基本操作(分离、附加、备份、还原) 、对象相关性(未完成,因为懒) 、关键字加色显示
My
SQL
执行
外部
sql
脚本
文件的命令及
sql
脚本
的基本写法
sql
脚本
是包含一到多个
sql
命令的
sql
语句,将这些
sql
脚本
放在一个文件中,然后通过相关的命令
执行
这个
sql
脚本
文件。
SQL
脚本
可用于插入数据,读取数据,更新数据,和删除数据。它们也可以用于创建数据库对象,如表,...
MS-SQL Server
34,588
社区成员
254,588
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章