¿Cómo pasar una ruta a un procedimiento almacenado?

Mi pregunta está en mi título, he definido un procedimiento almacenado con lo siguiente

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

Cuando quiero ejecutar el siguiente comando:

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

Me da este error:

Msg 102, nivel 15, estado 1, línea 1
Sintaxis incorrecta cerca de 'D:'.
Msg 105, nivel 15, estado 1, línea 1
Comillas sin cerrar después de la cadena de caracteres ''.

¿Alguien tiene una idea de por qué esto da errores? Puedo hacer que funcione codificando la ruta en el procedimiento, pero quiero poder pasarlo en un parámetro.

preguntado el 03 de mayo de 12 a las 09:05

Como se encuentra en mssqltips.com/sqlservertip/1174/… pero luego quiero poder pasar la ruta como un parámetro en lugar de una codificación fija. probó la solución con la versión codificada. Eso funciona. -

2 Respuestas

Trata

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

etc ...

contestado el 03 de mayo de 12 a las 09:05

No es el tema del parámetro. está haciendo una declaración de ejecución incorrecta que usa comillas simples y no ha escapado de esa ...

puede escapar de comillas simples usando dos comillas simples (NO comillas dobles). Si una cadena de caracteres entre comillas simples contiene una comilla incrustada, represente la comilla simple incrustada con dos comillas simples.

p.ej

USE AdventureWorks
GO
SELECT *
FROM Person.Address
WHERE City = 'Villeneuve-d''Ascq'
GO

Ref:
Carácter de escape en SQL
SERVIDOR SQL – Cómo escapar de las comillas simples – Corrección: Error: 105 Comillas sin cerrar después de la cadena de caracteres '

contestado el 23 de mayo de 17 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.