字符串或二进制数据将被截断。声明已被终止

我在SQL server上遇到了一些问题,这是我创建的函数:

ALTER函数[dbo].[testing1](@price int)
返回@trackingItems1表(
项目nvarchar NULL,
仓库nvarchar NULL,
价格整型空
) 
像
开始
插入@trackingItems1(项目、仓库、价格)
选择ta.item、ta.warehouse、ta.price
来自股票ta
其中ta.price>[email protected]价格
回来
终止

当我编写一个查询来使用下面这样的函数时,它会得到错误

字符串或二进制数据将被截断。该声明已终止

我如何解决这个问题

从测试中选择*1(2)

这是我创建表的方式

创建表格库存(项目nvarchar(50)空,
仓库nvarchar(50)空,
价格(零);

定义varcharetc时,如果没有长度,默认值为1

当数据定义或变量声明语句中未指定n时,默认长度为1。如果未使用CAST函数指定n,则默认长度为30

因此,如果您希望股票中的@trackingItems1列中有400字节,请使用nvarchar(400)

否则,您将尝试将>1个字符放入nvarchar(1)=失败

作为注释,这也是table value函数的一个不好的用法,因为它是“多语句”。它可以这样写,它会运行得更好

ALTER函数[dbo].[testing1](@price int)
返回
像
选择ta.item、ta.warehouse、ta.price
来自股票ta
其中ta.price>[email protected]价格

当然,您可以使用普通的SELECT语句

发表评论