我在SQL服务器上遇到了一些问题,这是我创建的函数:
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;
当我像下面这样编写一个查询来使用该函数时,它得到了错误
字符串或二进制数据将被截断。该语句已终止
我如何解决这个问题?
select * from testing1(2)
这是我创建表的方式
CREATE TABLE stock(item nvarchar(50) NULL,
warehouse nvarchar(50) NULL,
price int NULL);
发布于 2013-02-22 16:06:21
当您定义varchar
etc without a length, the default is 1.时
如果未在数据定义或变量声明语句中指定n,则默认长度为1。如果未使用CAST函数指定n,则默认长度为30。
因此,如果您希望stock
的@trackingItems1
列中有400个字节,那么可以使用nvarchar(400)
。
否则,您将尝试在nvarchar(1)
= fail中容纳>1个字符
作为注释,这也是bad use of table value function,因为它是“多语句”。它可以像这样写,它会运行得更好
ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS
AS
SELECT ta.item, ta.warehouse, ta.price
FROM stock ta
WHERE ta.price >= @price;
当然,您可以只使用普通的SELECT语句。
发布于 2013-02-22 16:05:13
目标列的最大长度小于您尝试插入的值。
在SQL管理器中右键单击表,然后转到“设计”以可视化您的表结构和列定义。
编辑:
尝试设置nvarchar插入的长度,该长度与表中定义的长度相同或更短。
发布于 2016-07-20 16:17:52
在我的例子中,我得到这个错误是因为我的表有
varchar(50)
但是我注入了67个字符的字符串,这导致了这个错误。将其更改为
varchar(255)
已修复此问题。
https://stackoverflow.com/questions/15019397
复制相似问题