我又来了,还是存储过程的问题

多难成佛 2012-05-09 02:10:09
存储过程:

USE [test]
GO
/****** 对象: StoredProcedure [dbo].[BackupFullDB] 脚本日期: 05/09/2012 04:34:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BackupFullDB]
@DBName VARCHAR(100),
@ym VARCHAR(6),
@ymd VARCHAR(8),
@BackupFile VARCHAR(100),
@BackName VARCHAR(100),
@tmp VARCHAR(100),
@backupSetId INT
AS
EXECUTE ('BACKUP DATABASE' + ' ' +
'[' +
@DBName +
']' +
'TO DISK =' +
@BackupFile + ' ' +
'WITH' + ' ' +
'NOFORMAT' +
',NOINIT' +
',NAME =' +
@BackName +
',SKIP' +
',NOREWIND' +
',NOUNLOAD' +
',STATS =' +
@backupSetId +
',CHECKSUM')


调用语句:

USE test
DECLARE @DBName VARCHAR(100)
DECLARE @ym VARCHAR(100)
DECLARE @tmp VARCHAR(100)
DECLARE @BackupFile VARCHAR(100)
DECLARE @BackName VARCHAR(100)
DECLARE @backupSetId INT
EXECUTE dbo.BackupFullDB
@DBName = 'Beijixiong_Data',
@ym = Convert(char(6),getdate() ,112),
@tmp = '''验证失败。找不到数据库' + @DBName + '的备份信息。''',
@BackupFile = N'''E:\FULL\' + @DBName + '_' + 'full' + '_' + @ym + '.bak''',
@BackName = '''' + @DBName + '_' + 'full' + '_' + @ym + '''',
@backupSetId = 10


调用语句报错:
10行:关键字 'Convert' 附近有语法错误。
11行、12行、13行:'+' 附近有语法错误。

请指教!谢谢!
...全文
178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gogodiy 2012-05-09
  • 打赏
  • 举报
回复
动态SQL中,需要将数值型,日期型都转换为字符型。
孤独加百列 2012-05-09
  • 打赏
  • 举报
回复
把整形转化为字符串

USE [test]
GO
/****** 对象: StoredProcedure [dbo].[BackupFullDB] 脚本日期: 05/09/2012 04:34:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[BackupFullDB]
@DBName VARCHAR(100),
@ym VARCHAR(6),
@ymd VARCHAR(8),
@BackupFile VARCHAR(100),
@BackName VARCHAR(100),
@tmp VARCHAR(100),
@backupSetId INT
AS
EXECUTE ('BACKUP DATABASE' + ' ' +
'[' +
@DBName +
']' +
'TO DISK =' +
@BackupFile + ' ' +
'WITH' + ' ' +
'NOFORMAT' +
',NOINIT' +
',NAME =' +
@BackName +
',SKIP' +
',NOREWIND' +
',NOUNLOAD' +
',STATS =' +
CAST(@backupSetId AS VARCHAR(10)) +
',CHECKSUM')
多难成佛 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
只能说这是语法规定咯,没得解释.
[/Quote]
也对哈,不能老按我自己的思路去钻,这是微软规定的,哈哈
  • 打赏
  • 举报
回复
sql 拼接的问题,像这种问题,可以先print 下拼接后生成的sql,然后看看sql哪儿不正确
ghrui 2012-05-09
  • 打赏
  • 举报
回复
还是打印出来就知道了
唐诗三百首 2012-05-09
  • 打赏
  • 举报
回复

create procedure [dbo].[BackupFullDB]
@DBName VARCHAR(100),
@ym VARCHAR(6),
@ymd VARCHAR(8),
@BackupFile VARCHAR(100),
@BackName VARCHAR(100),
@tmp VARCHAR(100),
@backupSetId INT
as
begin
declare @sql varchar(6000)
select @sql='BACKUP DATABASE' + ' ' +
'[' +
@DBName +
']' +
'TO DISK =' +
@BackupFile + ' ' +
'WITH' + ' ' +
'NOFORMAT' +
',NOINIT' +
',NAME =' +
@BackName +
',SKIP' +
',NOREWIND' +
',NOUNLOAD' +
',STATS =' +
cast(@backupSetId as varchar(6)) +
',CHECKSUM'
exec(@sql)
end


USE test
DECLARE @DBName VARCHAR(100),@DBName2 VARCHAR(100)= 'Beijixiong_Data'
DECLARE @ym VARCHAR(100),@ym2 VARCHAR(100)=Convert(char(6),getdate() ,112)
DECLARE @tmp VARCHAR(100),@tmp2 VARCHAR(100)= '验证失败。找不到数据库' + @DBName2 + '的备份信息。'
DECLARE @BackupFile VARCHAR(100),@BackupFile2 VARCHAR(100)= N'''E:\full\' + @DBName2 + '_' + 'full' + '_' + @ym2 + '.bak'''
DECLARE @BackName VARCHAR(100),@BackName2 VARCHAR(100)= '''' + @DBName2 + '_' + 'full' + '_' + @ym2 + ''''
DECLARE @backupSetId int

EXECUTE dbo.BackupFullDB
@DBName = @DBName2,
@ym = @ym2,
@ymd = '',
@tmp = @tmp2,
@BackupFile = @BackupFile2,
@BackName = @BackName2 ,
@backupSetId = 10
唐诗三百首 2012-05-09
  • 打赏
  • 举报
回复
只能说这是语法规定咯,没得解释.

多难成佛 2012-05-09
  • 打赏
  • 举报
回复
直接使用SET @变量='字符串'然后传给存储过程,会报错,
而当使用一个过渡变量赋值时(@变量=@变量2),同样的字符串,为什么它就不报错了?

给存储过程传递的参数,为什么不能使用函数?例如这句:
DECLARE @ym VARCHAR(100)
DECLARE @ym2 VARCHAR(100)
SET @ym2 = Convert(char(6),getdate() ,112),
EXECUTE [过程]
@ym = Convert(char(6),getdate() ,112),
为什么总是说Convert附近有错误?
而当
EXECUTE [过程]
@ym = @ym2
时,它又不报错了。语法错在哪里呢?

34,590

社区成员

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

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