语法错误在存储过程内部附近

时间:2014-04-07 14:56:29

标签: sql sql-server sql-server-2008 tsql

我正在尝试在SQL Server 2008 Express中运行存储过程。但我总是得到这个错误:

  

语法不正确')'内存存储过程

调用语法为:

Use Demo1
SP_Backup_StoredProcedure '[dbo.FilesStore]', 'F'

并且存储过程的代码是:

ALTER PROCEDURE [dbo].[SP_Backup_StoredProcedure]  
       @dbName sysname, @backupTypeToRun CHAR(1) 
AS 
BEGIN 
       SET NOCOUNT ON; 

       DECLARE @sqlCommand NVARCHAR(1000) 
       DECLARE @dateTime NVARCHAR(20) 

       SELECT @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),111),'/','-') +'-' +
       REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  

       DECLARE @databaseFileName NVARCHAR(200)
       SET @databaseFileName = replace(@dbName,']','')
       SET @databaseFileName = replace(@databaseFileName,'[','')

       IF @backupTypeToRun = 'F' 
               SET @sqlCommand = 'BACKUP DATABASE ' + @dbName + 
               ' TO DISK = ''C:\DbBackups\' + @databaseFileName + '_Full_' + @dateTime + '.BAK''' 

       IF @backupTypeToRun = 'D' 
               SET @sqlCommand = 'BACKUP DATABASE ' + @dbName + 
               ' TO DISK = ''C:\DbBackups\' + @databaseFileName + '_Diff_' + @dateTime + '.BAK'' WITH DIFFERENTIAL' 

       IF @backupTypeToRun = 'L' 
               SET @sqlCommand = 'BACKUP LOG ' + @dbName + 
               ' TO DISK = ''C:\DbBackups\' + @databaseFileName + '_Log_' + @dateTime + '.TRN''' 

       EXECUTE sp_executesql @sqlCommand 
END

请尝试不同的答案,我也使用逗号作为参数和每个可用的答案。请帮忙

2 个答案:

答案 0 :(得分:1)

使用

SP_Backup_StoredProcedure '[FilesStore]', 'F'

答案 1 :(得分:1)

您的示例存在许多问题。

  1. 数据库名称格式为[databasename]
  2. 表名格式为[databasename].[dbo].[tablename]
  3. 使用EXEC schema.ProcNameEXECUTE schema.ProcName
  4. 调用proc时
  5. 最佳做法是在您的案例EXEC schema.ProcName @dbname = '[dbname]', @backupTypeToRun = 'F'
  6. 中明确指定参数
  7. 就像评论中已提到的那样。 sp_保留用于内置存储过程。将其重命名为usp_或其他任何内容。当SP以'sp_'开头时,SQL Server将首先尝试在内置列表中找到它。
  8. 根据您的上一条评论,您尝试传入tablename tbl_test而不是数据库名称。