string或二进制数据将被截断。 该语句已终止
我遇到了SQL服务器的一些问题,这是我创build的function:
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;
当我编写一个查询来使用像下面这样的函数时,得到错误
string或二进制数据将被截断。 该语句已终止
如何解决? 谢谢
select * from testing1(2)
这是我创build表的方式
CREATE TABLE stock(item nvarchar(50) NULL, warehouse nvarchar(50) NULL, price int NULL);
当你定义varchar
等没有长度,默认是1。
当在数据定义或variables声明语句中未指定n时,缺省长度为1.当未使用CAST函数指定n时,缺省长度为30。
所以,如果您期望stock
@trackingItems1
列中有400个字符,请使用nvarchar(400)
。
否则,您正试图将nvarchar(1)
= fail中的大于1个字符
作为一个评论,这也是表值函数使用不当,因为它是“多语句”。 它可以这样写,它会运行得更好
ALTER FUNCTION [dbo].[testing1](@price int) RETURNS AS SELECT ta.item, ta.warehouse, ta.price FROM stock ta WHERE ta.price >= @price;
当然,你可以使用普通的SELECT语句。
目标列的最大长度短于您尝试插入的值。
右键单击SQLpipe理器中的表,然后转到“devise”,以查看您的表结构和列定义。
编辑:
尝试在你的nvarchar插入上设置一个长度,该长度与表中定义的相同或者更短。
指定项目和仓库的大小,如[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 )
由于在MSSQL中只说nvarchar等于nvarchar(1),因此股票表中列的值被截断
在我的情况下,我得到这个错误,因为我的表
varchar(50)
但是我注入了67个字符的长string,导致了错误。 将其更改为
varchar(255)
解决了这个问题。