¿Cómo pasar una ruta a un procedimiento almacenado?
Frecuentes
Visto 2,653 veces
0
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.
2 Respuestas
3
Trata
' TO DISK = ''' + @path + @databaseName
etc ...
contestado el 03 de mayo de 12 a las 09:05
1
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 sql-server stored-procedures path or haz tu propia pregunta.
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. - SynerCoder