mensaje - if en sql server ejemplos
¿Cuál es el significado del prefijo N en las declaraciones T-SQL? (4)
He visto el prefijo N en algunas consultas T-SQL de inserción. Muchas personas han usado N
antes de insertar el valor en una tabla.
Busqué, pero no pude entender cuál es el propósito de incluir la N
antes de insertar cualquier cadena en la tabla.
INSERT INTO Personnel.Employees
VALUES(N''29730'', N''Philippe'', N''Horsford'', 20.05, 1),
- Actuación:
Supongamos que la cláusula de dónde es así:
WHERE NAME=''JON''
Si la columna NOMBRE es de cualquier tipo que no sea nvarchar o nchar, no debe especificar el prefijo N. Sin embargo, si la columna NOMBRE es de tipo nvarchar o nchar, entonces si no especifica el prefijo N, entonces ''JON'' se trata como no Unicode. Esto significa que el tipo de datos de la columna NOMBRE y la cadena ''JON'' son diferentes, por lo que SQL Server convierte implícitamente el tipo de un operando al otro. Si el SQL Server convierte el tipo de literal al tipo de columna, entonces no hay problema, pero si lo hace de otra manera, el rendimiento se verá afectado porque no se utilizará el índice de la columna (si está disponible).
- Conjunto de caracteres:
Si la columna es de tipo nvarchar o nchar, use siempre el prefijo N mientras especifica la cadena de caracteres en la cláusula WHERE / UPDATE / INSERT. Si no lo hace y uno de los caracteres de su cadena es unicode (como los caracteres internacionales, por ejemplo, ā), fallará o sufrirá daños en los datos.
Asumiendo que el valor es de tipo nvarchar para eso solo estamos usando N ''''
Déjame decirte que sucedió una cosa molesta con el prefijo N '''' de la cosa. y no pude arreglar 2 días.
Mi clasificación de db es SQL_Latin1_General_CP1_CI_AS .
hay una mesa. columna MyCol1 es Nvarchar
pero esta consulta no coincide con el valor exacto que existe.
SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = ''ESKİ''
// 0 result
usando el prefijo N '''' lo arregla
SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = N''ESKİ''
// 1 result - found!!!!
¿por qué? porque latin1_general no tiene grandes puntos, por eso falla, supongo.
Está declarando la cadena como tipo de datos nvarchar
, en lugar de varchar
Es posible que haya visto un código Transact-SQL que pasa cadenas utilizando un prefijo N. Esto denota que la cadena posterior está en Unicode (la N en realidad representa el conjunto de caracteres del idioma nacional). Lo que significa que está pasando un valor NCHAR, NVARCHAR o NTEXT, a diferencia de CHAR, VARCHAR o TEXT.
Para citar de Microsoft :
Prefijo las constantes de la cadena de caracteres Unicode con la letra N. Sin el prefijo N, la cadena se convierte a la página de códigos predeterminada de la base de datos. Esta página de códigos predeterminada puede no reconocer ciertos caracteres .
Si desea conocer la diferencia entre estos dos tipos de datos, consulte esta publicación SO: