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);
Best Answer
When you define
varchar
etc without a length, the default is 1.So, if you expect 400 bytes in the
@trackingItems1
column fromstock
, usenvarchar(400)
.Otherwise, you are trying to fit >1 character into
nvarchar(1)
= failAs 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
Of course, you could just use a normal SELECT statement..