sqlserver CAST (AS nvarchar) pit - truncado de conversión de tipo de datos

retroalimentación desarrollo de sincronización de datos, los datos se truncan mesa de escribir, por ejemplo:

  • Los datos de origen: ABC_DEFGHIJKL, Referencia: ABC-31000000-ABCDEF, AES123456789
  • Después de escribir solamente: ABC_DEFGHIJKL, Referencia: ABC

Ver la tabla correspondiente tipo de campo nvarchar (100), la sincronización instrucción de inserción usando  INSERT INTO xxx VALORES (CAST (AS nvarchar)).

 

Crear una tabla de prueba de inserción de datos de prueba.

create table tmp0327(name nvarchar(100));
INSERT INTO tmp0327 VALUES(CAST ('ABC_DEFGHIJKL,Reference:ABC-31000000-ABCDEF,AES123456789' AS nvarchar));
INSERT INTO tmp0327 VALUES('ABC_DEFGHIJKL,Reference:ABC-31000000-ABCDEF,AES123456789');

Select datalength(name),* from tmp0327;

Después de la conversión se puede ver la cadena se corta, sin la conversión de lo normal. REPARTO sospechoso (AS nvarchar) con corte automático de la función, a revisar la documentación oficial de la definición que se encuentra en la siguiente descripción:

Si el valor nvarchar (n) cuando n no se especifica en la definición de campo o declaración de variables, el valor predeterminado n es 1; si la función CAST y CONVERT, n no se especifica, el valor predeterminado es 30. Tema también puede ser visto desde el ABC_DEFGHIJKL anterior, Referencia: ABC-31 pasa a ser 30, una longitud de 60.

Así que si queremos insertar cuando los datos no se trunca de dos maneras:

  • No mostrar la conversión, a su vez, sqlserver conversión implícita para usted
  • Si utilizamos, para especificar el valor de n, por ejemplo,
INSERT INTO tmp0327 VALUES(CAST ('ABC_DEFGHIJKL,Reference:ABC-31000000-ABCDEF,AES123456789' AS nvarchar(100)));

También a continuación, puede verificar con documentos oficiales dicen, el valor nvarchar (n) n no se especifica en la definición del campo o la declaración de variables, n valores por defecto a 1

create table tmp0327_2(name nvarchar);

Definido sqlserver véase la tabla, podemos ver que realmente es de tipo nvarchar (1)

 

referencia

https://docs.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-ver15

https://www.cnblogs.com/firstdream/p/5511404.html

Publicados 295 artículos originales · ganado elogios 35 · Vistas a 80000 +

Supongo que te gusta

Origin blog.csdn.net/Hehuyi_In/article/details/105147899
Recomendado
Clasificación