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数据库获得数据库,然后备份.因为我定义的是动态的两个参数.所以,拼起来,貌似搞不定...大神帮忙...
...全文
261 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
谢了,不过,游标我试过,游标没有错,就后面要备份的时候,拼接字符串不会...
全栈极简 2013-07-27
  • 打赏
  • 举报
回复
你上面的sql错误很多,我就不说了。你好好参考一下。不要用游标来循环,你那样就是备份所有的数据库了。
全栈极简 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
  • 打赏
  • 举报
回复
就是最后一行那里拼不了....

34,587

社区成员

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

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