String or binary data would be truncated. The statement has been terminated

sql, sql-server

Solution

When you define `varchar` etc without a length, the default is 1.

When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified with the CAST function, the default length is 30.

So, if you expect 400 bytes in the `@trackingItems1` column from `stock`, use `nvarchar(400)`.

Otherwise, you are trying to fit >1 character into `nvarchar(1)` = fail

As a comment, this is bad use of table value function too because it is "multi statement". It can be written like this and it will run better

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

Of course, you could just use a normal SELECT statement..

Problem

I have met some problem with the SQL server, this is the function I created: ``` 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; ``` When I write a query to use that function like the following it getting the error String or binary data would be truncated. The statement has been terminated How can I fix this problem? ``` select * from testing1(2) ``` This is the way I create the table ``` CREATE TABLE stock(item nvarchar(50) NULL, warehouse nvarchar(50) NULL, price int NULL); ```

Original source

Related problems