0

私の質問は私のタイトルにあります、私は次のようにストアドプロシージャを定義しました

CREATE PROCEDURE [dbo].[sp_doStuff]   
       @path CHAR(256), @databaseName sysname, @backupType 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),':','')   

   IF @backupType = 'F'  
           SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +  
           ' TO DISK = ' + @path + @databaseName + '_Full_' + @dateTime + '.BAK'''  

   IF @backupType = 'D'  
           SET @sqlCommand = 'BACKUP DATABASE ' + @databaseName +  
           ' TO DISK = ' + @path + @databaseName + '_Diff_' + @dateTime + '.BAK'' WITH DIFFERENTIAL' 

   IF @backupType = 'L'  
           SET @sqlCommand = 'BACKUP LOG ' + @databaseName +  
           ' TO DISK = ' + @path + @databaseName + '_Log_' + @dateTime + '.TRN'''  

   EXECUTE sp_executesql @sqlCommand  
END

次のコマンドを実行したい場合:

[dbo].[sp_doStuff] 'D:\FolderName\', 'MyDatabase', 'F';

それは私にこのエラーを与えます:

メッセージ102、レベル15、状態1、行1
「D:」の近くの構文が正しくありません。
メッセージ105、レベル15、状態1、行1
文字列''の後の閉じられていない引用符。

なぜこれがエラーになるのか、誰かが手がかりを持っていますか?パスをプロシージャにハードコーディングすることで機能させることができますが、パラメータで渡すことができるようにしたいと思います。

4

2 に答える 2

3

試す

' TO DISK = ''' + @path + @databaseName

等...

于 2012-05-03T08:15:37.540 に答える
1
于 2012-05-03T08:17:14.097 に答える