首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串或二进制数据将被截断。该语句已终止

字符串或二进制数据将被截断。该语句已终止
EN

Stack Overflow用户
提问于 2013-02-22 15:57:50
回答 5查看 406.4K关注 0票数 87

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

代码语言:javascript
复制
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;

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

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

我如何解决这个问题?

代码语言:javascript
复制
select * from testing1(2)

这是我创建表的方式

代码语言:javascript
复制
CREATE TABLE stock(item       nvarchar(50) NULL,
                   warehouse   nvarchar(50) NULL,
                   price int NULL);
EN

回答 5

Stack Overflow用户

发布于 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,因为它是“多语句”。它可以像这样写,它会运行得更好

代码语言:javascript
复制
ALTER FUNCTION [dbo].[testing1](@price int)
RETURNS
AS
   SELECT ta.item, ta.warehouse, ta.price 
   FROM   stock ta
   WHERE  ta.price >= @price;

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

票数 71
EN

Stack Overflow用户

发布于 2013-02-22 16:05:13

目标列的最大长度小于您尝试插入的值。

在SQL管理器中右键单击表,然后转到“设计”以可视化您的表结构和列定义。

编辑:

尝试设置nvarchar插入的长度,该长度与表中定义的长度相同或更短。

票数 43
EN

Stack Overflow用户

发布于 2016-07-20 16:17:52

在我的例子中,我得到这个错误是因为我的表有

代码语言:javascript
复制
varchar(50)

但是我注入了67个字符的字符串,这导致了这个错误。将其更改为

代码语言:javascript
复制
varchar(255)

已修复此问题。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15019397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档