SQL server 2005 中如何把文件夹中的.sql文件一次性导入。 求文件夹中的很多个存储过程(.sql文件)一次性导入的方法。最好是写一段代码,执行一下就能全部导入。不胜感激。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 应该事批量执行吧,我好像说错了。举个例子:D:\Source\SQL\下有存储过程A.SQLB.SQLC.SQL如何在SQL server 2005下一次执行。把三个存储过程全放进去。 建立一个test.bat文件,编辑test.bat文件输入内容:sqlcmd -S 数据库服务器IP -U sa -P 密码 -d 数据库名称 -i D:\Source\SQL\A.sqlsqlcmd -S 数据库服务器IP -U sa -P 密码 -d 数据库名称 -i D:\Source\SQL\B.sqlsqlcmd -S 数据库服务器IP -U sa -P 密码 -d 数据库名称 -i D:\Source\SQL\C.sql数据库服务器IP ,密码,数据库名称替换成你相应的内容即可然后运行test.bat即可 恩,可以的,谢谢!我想的太复杂了。这是网上找来的一个方法,不过没调试通。看来不需要这么复杂啊。*-------------------------------批量执行sql脚本--批量执行文件夹下面的所有sql脚本--yangys 2005/07/04*/create procedure exeSqlFileBatch( @returnCode int=0 output, --返回错误数 @returnSucceed int=0 output, --成功执行文件数量 @serverName varchar(1000), --服务器名称 @dataBase varchar(500), --数据库名称 @uid varchar(50), --用户名 @pwd varchar(50), --密码 @filePath varchar(5000) --文件路径)with encryption as declare @strsql varchar(6000)set @strsql=' dir '+@filePath+'\*.sql'--创建临时表create table #tmptb(fileDes varchar(5000))--将文件夹信息插入临时表insert into #tmptbexec master.dbo.xp_cmdshell @strsqlif @@error <>0 begin set @returnCode=1 return @returnCodeend --从临时表中提取有用的记录select dbo.f_split(fileDes,' ')as fileDesinto #tmepUse from #tmptbwhere fileDes like '%.sql'--定义游标declare fetFileName cursorfor select fileDes from #tmepUsedeclare @strFileName varchar(2000)declare @reExe int--定义错误信息表create table #errorTable(errorFileName varchar(1000))--打开游标并历遍进行取值open fetFileNamefetch next from fetFileName into @strFileNamewhile @@FETCH_STATUS = 0begin --执行该数据脚本文件 set @strsql='osql -S '+@serverName +' -U '+@uid +' -P '+@pwd +' -d '+@dataBase +' -i ' +@filePath +'\'+@strFileName exec @reExe=master.dbo.xp_cmdShell @strsql --统计执行错误数执行成功数 if @reExe=0 set @returnSucceed=@returnSucceed+1 else begin --没办法,xp_cmdShell 总返回零。可能无法获取osql所发生的错误 insert #errorTable values(@strFileName) set @returnCode=@returnCode+1 end fetch next from fetFileName into @strFileNameend close fetFileNamedeallocate fetFileName--返回错误错误信息 select *from #errorTablereturn --测试declare @returnCode int declare @returnSucceed int set @returnCode=0set @returnSucceed=0exec exeSqlFileBatch @returnCode output,@returnSucceed output,'prg','yys','sa','','D:\ERP\Database\View'print @returnCodeprint @returnSucceed--测试前请先创建函数/*---------------------实现split功能 的函数--yangys 2005/07/04--只返回最后的一串*/create function f_split( @SourceSql varchar(8000),--字符串 @StrSeprate varchar(10)--分隔符)returns varchar(1000)as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end return @SourceSqlend 求SQL基础学习资料 农历的表示 这个触发器大家看看错在哪里? 输入格式问题 求助关于查询语句应用问题~~~例题 這條統計語句怎麼寫? 求助一个比较菜的问题,马上给分 存储过程和视图的区别? 入门问题:如何备份数据库中的表?如pubs数据库中的表titles? 为什么sql server数据库的numeric类型,在vb中录入会出错? 以sa的身份打开syscomments表,删除text字段中的一个值,但无法删除,提示“无法编辑该单元”,什么原因? 请问一下如何对字符串加解密
举个例子:
D:\Source\SQL\下有存储过程
A.SQL
B.SQL
C.SQL
如何在SQL server 2005下一次执行。把三个存储过程全放进去。
sqlcmd -S 数据库服务器IP -U sa -P 密码 -d 数据库名称 -i D:\Source\SQL\A.sql
sqlcmd -S 数据库服务器IP -U sa -P 密码 -d 数据库名称 -i D:\Source\SQL\B.sql
sqlcmd -S 数据库服务器IP -U sa -P 密码 -d 数据库名称 -i D:\Source\SQL\C.sql数据库服务器IP ,密码,数据库名称替换成你相应的内容即可
然后运行test.bat即可
我想的太复杂了。这是网上找来的一个方法,不过没调试通。看来不需要这么复杂啊。
*-------------------------------批量执行sql脚本--批量执行文件夹下面的所有sql脚本--yangys 2005/07/04*/create procedure exeSqlFileBatch( @returnCode int=0 output, --返回错误数 @returnSucceed int=0 output, --成功执行文件数量 @serverName varchar(1000), --服务器名称 @dataBase varchar(500), --数据库名称 @uid varchar(50), --用户名 @pwd varchar(50), --密码 @filePath varchar(5000) --文件路径)with encryption as declare @strsql varchar(6000)set @strsql=' dir '+@filePath+'\*.sql'--创建临时表create table #tmptb(fileDes varchar(5000))--将文件夹信息插入临时表insert into #tmptbexec master.dbo.xp_cmdshell @strsqlif @@error <>0 begin set @returnCode=1 return @returnCodeend --从临时表中提取有用的记录select dbo.f_split(fileDes,' ')as fileDesinto #tmepUse from #tmptbwhere fileDes like '%.sql'--定义游标declare fetFileName cursorfor select fileDes from #tmepUsedeclare @strFileName varchar(2000)declare @reExe int--定义错误信息表create table #errorTable(errorFileName varchar(1000))--打开游标并历遍进行取值open fetFileNamefetch next from fetFileName into @strFileNamewhile @@FETCH_STATUS = 0begin --执行该数据脚本文件 set @strsql='osql -S '+@serverName +' -U '+@uid +' -P '+@pwd +' -d '+@dataBase +' -i ' +@filePath +'\'+@strFileName exec @reExe=master.dbo.xp_cmdShell @strsql --统计执行错误数执行成功数 if @reExe=0 set @returnSucceed=@returnSucceed+1 else begin --没办法,xp_cmdShell 总返回零。可能无法获取osql所发生的错误 insert #errorTable values(@strFileName) set @returnCode=@returnCode+1 end fetch next from fetFileName into @strFileNameend close fetFileNamedeallocate fetFileName--返回错误错误信息 select *from #errorTablereturn --测试declare @returnCode int declare @returnSucceed int set @returnCode=0set @returnSucceed=0exec exeSqlFileBatch @returnCode output,@returnSucceed output,'prg','yys','sa','','D:\ERP\Database\View'print @returnCodeprint @returnSucceed--测试前请先创建函数/*---------------------实现split功能 的函数--yangys 2005/07/04--只返回最后的一串*/create function f_split( @SourceSql varchar(8000),--字符串 @StrSeprate varchar(10)--分隔符)returns varchar(1000)as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i>=1 begin set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i) set @i=charindex(@StrSeprate,@SourceSql) end return @SourceSqlend