Saltar al contenido

Variable de escape en sqlcmd / Invoke-SqlCmd

Revisamos de forma completamente cada artículos de nuestra página web con la meta de mostrarte siempre información veraz y certera.

Solución:

Después de investigar usando alguna reflexión sobre

C:Archivos de programa (x86)Microsoft SQL Server120ToolsPowerShellModulesSQLPSMicrosoft.SqlServer.Management.PSSnapins.dll

Mirando a ExecutionProcessorlas siguientes líneas revelan el problema de que fallará si hay más de un signo igual en la definición de la variable.

Mi recomendación para cualquiera que intente usar Invoke-SqlCmd es ahorrar tiempo y cordura y simplemente usar la alternativa de código abierto Invoke-SqlCmd2 en su lugar.

Microsoft, por favor corrija.

Usar CHAR(61) para reemplazar el signo igual.

$variable = "'Hello=World'"
$variables = @( "MyVariable=$($variable.replace("=","'+CHAR(61)+'"))" )

Invoke-SqlCmd -ServerInstance 'localhost' -Database 'master' -Query 'SELECT $(MyVariable) AS foo' -Variable $variables

También me encontré con la necesidad de pasar una pieza de información codificada en base64 que tenía esos molestos ‘=’ en ellos. Lo que funcionó para mí fue agregar un token de reemplazo en la variable array que paso a la consulta y luego uso la función REEMPLAZAR de SQL en mi consulta para reemplazar mi token con un signo ‘=’.

Entonces puedes actualizar tu código para que se vea así:

$equalsSignReplacement = '[EQUALSIGN]'
$myVariable = 'aGVsbG8NCg=='
$variables = 
    "EqualsSignReplacement=$($equalsSignReplacement)",
    "MyVariable=$($myVariable.Replace('=',$equalsSignReplacement))"

Invoke-SqlCmd `
    -ServerInstance 'localhost' `
    -Database 'master' `
    -Username 'matthew' `
    -Password 'qwerty' `
    -Query 'SELECT REPLACE('$(MyVariable)','$(EqualsSignReplacement)','=') AS foo' `
    -Variable $variables

La desventaja de esta solución es que debe ser proactivo con su aplicación. Debe saber con anticipación qué variables pueden tener un ‘signo igual’ y luego actualizar no solo su código de PowerShell, sino también sus scripts SQL para asegurarse de que el reemplazo se realice correctamente.

Solo asegúrese de usar un token de reemplazo que sea único para sus variables para que no reemplace accidentalmente el texto válido con ‘=’ en sus consultas.

Ten en cuenta dar difusión a esta división si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *