导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

SQL存储过程,这个字符串怎么拼接哈?菜鸟求助.

wonkju 2013-07-27 08:51:38
ALTER PROCEDURE USP_DBBackup
@BackPath nvarchar(100)
@BackName nvarchar(50)
AS
SET NOCOUNT ON
declare cur cursor for
select name from master..SysDataBases --获取数据库名.
declare @cur nvarchar(4000)
open cur
fetch next from cur into @cur
while @@fetch_status = 0
begin
exec(@cur)
fetch next from cur into @cur
end
declare @name nvarchar(4000)
set @name = ''
select @name += @cur + ','
backup database Left(@name, Len(@name) - 1) to disk= @BackPath + '\'+@BackName --备份以上获得的数据库.


以上是我在 .mdf数据库获得数据库,然后备份.因为我定义的是动态的两个参数.所以,拼起来,貌似搞不定...大神帮忙...
...全文
205 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonkju 2013-07-28
引用 3 楼 guwei4037 的回复:
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
引用 3 楼 guwei4037 的回复:
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
谢了.我改成我这样就可以了...:
ALTER PROCEDURE USP_DBBackup
    @BackPath nvarchar(100),
    @BackName nvarchar(50)
AS
      SET NOCOUNT ON 
 
      declare @name nvarchar(4000)
      select @name = rtrim(ltrim(@name))
 
      if exists (SELECT Name FROM Master..SysDatabases where name = 'PersonnelManagementSystem')
        set @name= 'PersonnelManagementSystem'
 
      declare @outpath nvarchar(4000)
      select @outpath = @BackPath +'\'+ @BackName
 
    backup database @name to disk= @outpath
回复
Sharpend 2013-07-28
呵呵.貌似不支持...
回复
wonkju 2013-07-28
引用 3 楼 guwei4037 的回复:
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
不好意思,我连接的是错误的数据库,但是改后,总是报错说, sysdatabases 是个非法的对象...晕...
回复
wonkju 2013-07-28
引用 3 楼 guwei4037 的回复:
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
不行哈,大侠:
ALTER PROCEDURE USP_DBBackup
    @BackPath nvarchar(100),
    @BackName nvarchar(50)
AS
      SET NOCOUNT ON 
 
      declare @name nvarchar(4000)
      select @name = rtrim(ltrim(@name))
 
      if exists (select * from sysdatabases where name = 'PersonnelManagementSystem')
        set @name= 'PersonnelManagementSystem'
 
      declare @outpath nvarchar(4000)
      select @outpath = @BackPath +'\'+ @BackName
 
    backup database PersonnelManagementSystem to disk= @outpath
//最后一行,不管 是 PersonnelManagementSystem 还是 @name,都报这样的错: An attempt to attach an auto-named database for file E:\PersonnelManagementSystem\PersonnelManagementSystem\PersonnelManagementSystem\DB_PersonnelManagementSystem.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. 但是语句:select * from sysdatabases where name = 'PersonnelManagementSystem',我单独测试是有值的...何解?
回复
wonkju 2013-07-27
引用 3 楼 guwei4037 的回复:
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
谢了,不过,游标我试过,游标没有错,就后面要备份的时候,拼接字符串不会...
回复
guwei4037 2013-07-27
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
回复
guwei4037 2013-07-27
用这个,已经测试通过。
alter PROCEDURE USP_DBBackup
    @BackPath nvarchar(100),
    @BackName nvarchar(50)
AS
	  SET NOCOUNT ON 

      declare @name nvarchar(4000)
	  select @name = rtrim(ltrim(@name))

	  if exists (select * from sysdatabases where name = 'YJUIDB')
	    set @name= 'YJUIDB'

	  declare @outpath nvarchar(4000)
	  select @outpath = @BackPath +'\'+ @BackName

    backup database @name to disk= @outpath
回复
wonkju 2013-07-27
就是最后一行那里拼不了....
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告