sql - truncado - Cadena o datos binarios podrían truncarse. La instrucción se ha terminado
dato de tipo texto truncado por la derecha (4)
Cuando define varchar
etc. sin una longitud, el valor predeterminado es 1.
Cuando n no se especifica en una definición de datos o declaración de declaración de variable, la longitud predeterminada es 1. Cuando n no se especifica con la función CAST, la longitud predeterminada es 30.
Por lo tanto, si espera 400 caracteres en @trackingItems1
columna @trackingItems1
de stock
, use nvarchar(400)
.
De lo contrario, está intentando ajustar> 1 carácter en nvarchar(1)
= fail
Como comentario, esto también es un mal uso de la función de valor de tabla porque es una "declaración múltiple". Se puede escribir así y funcionará mejor.
ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS
AS
SELECT ta.item, ta.warehouse, ta.price
FROM stock ta
WHERE ta.price >= @price;
Por supuesto, puedes usar una instrucción SELECT normal ...
Me he encontrado con un problema con el servidor SQL, esta es la función que he creado:
ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS @trackingItems1 TABLE (
item nvarchar NULL,
warehouse nvarchar NULL,
price int NULL
)
AS
BEGIN
INSERT INTO @trackingItems1(item, warehouse, price)
SELECT ta.item, ta.warehouse, ta.price
FROM stock ta
WHERE ta.price >= @price;
RETURN;
END;
Cuando escribo una consulta para usar esa función como la siguiente, recibo el error.
Cadena o datos binarios podrían truncarse. La instrucción se ha terminado
¿Cómo resolverlo? Gracias
select * from testing1(2)
Así es como creo la tabla.
CREATE TABLE stock(item nvarchar(50) NULL,
warehouse nvarchar(50) NULL,
price int NULL);
En mi caso, estaba recibiendo este error porque mi tabla tenía
varchar(50)
pero estaba inyectando una cadena larga de 67 caracteres, lo que resultó en este error. Cambiándolo a
varchar(255)
arreglado el problema
Especifique un tamaño para el artículo y el almacén como en [dbo]. [Testing1] FUNCIÓN
@trackingItems1 TABLE (
item nvarchar(25) NULL, -- 25 OR equal size of your item column
warehouse nvarchar(25) NULL, -- same as above
price int NULL
)
Dado que en MSSQL solo decir que nvarchar es igual a nvarchar (1), por lo tanto, los valores de la columna de la tabla de valores se truncan
La longitud máxima de la columna de destino es más corta que el valor que intenta insertar.
Haga clic con el botón derecho en la tabla en el administrador de SQL y vaya a ''Diseño'' para visualizar la estructura de la tabla y las definiciones de columna.
Editar:
Intente establecer una longitud en sus inserciones nvarchar que sean iguales o más cortas que las definidas en su tabla.