sql-server-2008
  • sql-update
  • 2012-01-19 233 views 10 likes 
    10

    Tengo este ejemplo de consulta T-SQL y lo intento en SQL-Server-2008.Cómo manejar-escape de comillas simples y dobles en una instrucción SQL-Update

    DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" 
    
    UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah 
    

    Sé que la consulta anterior arrojará un error.

    Entonces, ¿cómo puedo manejar? Escapo tanto comillas simples como dobles en una instrucción SQL-Update.

    No sugiera que se agregue manualmente una 'barra oblicua' o una comilla simple antes de cada comilla, y que parezca una comilla doble.

    Esto no sería práctico porque el ejemplo anterior es simplemente uno y el valor real de la aplicación es de más de 1000 caracteres, que se recibiría de alguna otra fuente del sistema.

    +0

    ¿Es la situación que tiene un archivo de texto en particular que desea insertar manualmente en el cliente SQL?¿O está escribiendo un programa para insertar el archivo, y lo está probando en el cliente para descubrir cómo escribir el programa? –

    +0

    ¿está usando C#? – Pankaj

    +0

    Thx Russell ... por tratar de entender la situación. El escenario es similar: hay varios sistemas que nos envían esta cadena de más de 1000 caracteres. Ahora esta cadena se pasa como un parámetro sql y mi consulta de actualización sql necesita insertar una cadena en una columna en particular. – MukeshAnAlsoRan

    Respuesta

    15

    Puede escapar de las comillas con una barra invertida:

    "I asked my son's teacher, \"How is my son doing now?\"" 
    
    +1

    Ya he dicho que agregar manualmente una 'barra inclinada' o una comilla simple antes de cada comilla y para comillas dobles es impráctico y descartable, porque el ejemplo anterior es solo una muestra y el valor real de la aplicación es más de 1000 caracteres. – MukeshAnAlsoRan

    4

    Uso dos comillas simples para escapar de ellos en la instrucción SQL. Las comillas no debería ser un problema:

    SELECT 'How is my son''s school helping him learn? "Not as good as Stack Overflow would!"' 
    

    impresión:

    How is my son's school helping him learn? "Not as good as Stack Overflow would!"

    +0

    Gracias Mike. PERO ya he dicho que agregar manualmente una 'barra inclinada' o una comilla simple antes de cada comilla y para comillas dobles es impracticable y descartable, porque el ejemplo anterior es solo una muestra y el valor real de la aplicación es más de 1000 caracteres. – MukeshAnAlsoRan

    +2

    Si escapar de los personajes no es práctico, entonces me imagino que va a ser muy difícil escapar de ellos. Alternativamente, puede intentar determinar un valor sustituto para el "y reemplazarlos en lotes para que pueda ejecutar su consulta. Por supuesto, también tendrá que volver a reemplazarlos por los valores correctos cuando los necesite para su visualización. – mclark1129

    +0

    Ya Mike ... Pensé algo así ... sobre un reemplazo de lotes y similares, PERO creo que sería una exageración para este escenario y SQL debe tener una forma inherente y elegante de manejar esto, porque este problema han existido 10 años antes también. – MukeshAnAlsoRan

    0

    En C# y VB el objeto SqlCommand implementa el método Parameter.AddWithValue cuales maneja esta situación

    4

    Dependiendo en qué idioma está programando, puede usar una función para reemplazar las comillas dobles con dos comillas dobles.

    Por ejemplo en PHP que sería:

    str_replace('"', '""', $string); 
    

    Si usted está tratando de hacer que el uso de SQL única, tal vez REPLACE() es lo que busca.

    Así que la consulta sería algo como esto:

    "UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah " 
    
    1

    Uso "reemplazar" para eliminar caracteres especiales.

    REPLACE(ColumnName ,' " ','') 
    

    Ex: -

    --query ---

    DECLARE @STRING AS VARCHAR(100) 
    SET @STRING ='VI''RA""NJA "' 
    
    SELECT @STRING 
    SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME 
    

    --result ---

    VI'RA "" NJA"

    0

    Cuando SET QUOTED_IDENTIFIER está desactivado, las cadenas literales en expresiones pueden delimitarse mediante comillas simples o dobles.

    Si una cadena literal está delimitada por comillas dobles, la cadena puede contener comillas simples incrustadas, como apóstrofos.

    Cuestiones relacionadas