ti-enxame.com

Dados de seqüência ou binários seriam truncados. A instrução foi encerrada

Eu encontrei algum problema com o servidor SQL, esta é a função que eu criei:

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;

Quando eu escrevo uma consulta para usar essa função como o seguinte, obtendo o erro

String ou dados binários seriam truncados. A instrução foi encerrada

Como resolver isso? Obrigado

select * from testing1(2)

É assim que eu crio a mesa

CREATE TABLE stock(item       nvarchar(50) NULL,
                   warehouse   nvarchar(50) NULL,
                   price int NULL);
70
user2098512

Quando você define varchar etc sem comprimento, o padrão é 1.

Quando n não é especificado em uma declaração de declaração de variável ou definição de dados, o comprimento padrão é 1. Quando n não é especificado com a função CAST, o tamanho padrão é 30.

Portanto, se você espera 400 caracteres na coluna @trackingItems1 de stock, use nvarchar(400).

Caso contrário, você está tentando ajustar> 1 caractere em nvarchar(1) = fail

Como um comentário, isso é mau uso da função de valor de tabela também porque é "multi-declaração". Pode ser escrito assim e funcionará melhor

ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS
AS
   SELECT ta.item, ta.warehouse, ta.price 
   FROM   stock ta
   WHERE  ta.price >= @price;

Claro, você poderia simplesmente usar uma instrução SELECT normal.

58
gbn

O comprimento máximo da coluna de destino é menor do que o valor que você tenta inserir.

Clique com o botão direito do mouse na tabela no gerenciador de SQL e vá para 'Design' para visualizar sua estrutura de tabela e as definições de coluna.

Editar:

Tente definir um comprimento em suas inserções nvarchar que é o mesmo ou menor do que o que está definido em sua tabela.

36
OakNinja

No meu caso, eu estava recebendo esse erro porque minha mesa tinha

varchar(50)

mas eu estava injetando uma string longa de 67 caracteres, o que resultou no erro. Mudando para

varchar(255)

corrigido o problema.

14
Hammad Khan

Especifique um tamanho para o item e warehouse como no [dbo]. [Testing1] FUNCTION

@trackingItems1 TABLE (
item       nvarchar(25)  NULL, -- 25 OR equal size of your item column
warehouse   nvarchar(25) NULL, -- same as above
price int   NULL

) 

Uma vez que no MSSQL somente dizer somente nvarchar é igual a nvarchar (1), portanto os valores da coluna da tabela stock são truncados

8
Deb