sql Server 存储过程参数最大长度限制是多少?

熙风 2013-11-15 04:26:56
如题,以前有个上10W长度的传给存储过程都截断了,
在存储过程中把参数打印出来,好像只能打印1.6W多个字符

不要问参数为什么这么长。。。。。。
...全文
1925 24 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
duj2011 2013-11-16
  • 打赏
  • 举报
回复
好贴就要顶呀,,,
  • 打赏
  • 举报
回复
引用 19 楼 happy09li 的回复:
[quote=引用 16 楼 SQL 的回复:] [quote=引用 8 楼 happy09li 的回复:] [quote=引用 7 楼 SQL 的回复:] 帮助上面有的 如果消息字符串为非 Unicode 字符串,则最长不得超过 8,000 个字符;如果消息字符串为 Unicode 字符串,则最长不得超过 4,000 个字符。超过最大长度的字符串会被截断。varchar(max) 和 nvarchar(max) 数据类型均被截断为不大于 varchar(8000) 和 nvarchar(4000) 的数据类型。
但是我复制到word里面看了的,的的确确有1.6W多 如果用text 能支持多少?[/quote] print 就这么长,跟你定义的没关系 [/quote] print 就这么长 什么意思,print只能打那么长? [/quote] print 是显示效果,这个会截断的 但是你sp里面又不需要print 你穿参数的定义为varchar(max) 就可以了 这个参数本身是不会截断的,只是在ssms里面print ,你看到的结果 截断了而已
  • 打赏
  • 举报
回复
DECLARE @m VARCHAR(MAX) DECLARE @i INT = 0 WHILE @i < 15000 BEGIN SELECT @m = ISNULL(@m + ',' , '') + 'abcd' SET @i = @i + 1 END SELECT LEN(@m) DECLARE @t TABLE (NAME VARCHAR(4)) INSERT INTO @t ([NAME]) SELECT t.c.value('.' , 'VARCHAR(4)') FROM ( SELECT CONVERT( XML, '<v>'+ REPLACE (@m , ',' , '</v><v>')+ '</v>').query ('.') AS col ) a CROSS APPLY A.col.nodes('/v/text()') T (c) SELECT @@ROWCOUNT
Yole 2013-11-15
  • 打赏
  • 举报
回复
你可以把那么多ID串先存到数据库表中,然后用的时候在从表中读出来。
發糞塗牆 2013-11-15
  • 打赏
  • 举报
回复
print的说明: A message string can be up to 8,000 characters long if it is a non-Unicode string, and 4,000 characters long if it is a Unicode string. Longer strings are truncated. The varchar(max) and nvarchar(max) data types are truncated to data types that are no larger than varchar(8000) and nvarchar(4000). 我刚才那个就是解决方案啊,传表变量
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 16 楼 SQL 的回复:
[quote=引用 8 楼 happy09li 的回复:] [quote=引用 7 楼 SQL 的回复:] 帮助上面有的 如果消息字符串为非 Unicode 字符串,则最长不得超过 8,000 个字符;如果消息字符串为 Unicode 字符串,则最长不得超过 4,000 个字符。超过最大长度的字符串会被截断。varchar(max) 和 nvarchar(max) 数据类型均被截断为不大于 varchar(8000) 和 nvarchar(4000) 的数据类型。
但是我复制到word里面看了的,的的确确有1.6W多 如果用text 能支持多少?[/quote] print 就这么长,跟你定义的没关系 [/quote] print 就这么长 什么意思,print只能打那么长?
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 15 楼 DBA_Huangzj 的回复:
我擦,我以前试过,直接无法生成执行计划,后来在传入前转换成表变量再当参数传进去,速度从小时降到2分钟,要不你别纠结这事吧
这个没法不纠结,不然就不会 发帖了,,有好的解决方案参考下么
  • 打赏
  • 举报
回复
引用 14 楼 happy09li 的回复:
[quote=引用 13 楼 DBA_Huangzj 的回复:] 即使不截断,我估计问题更大,你那个参数传的是什么啊?类似一大串ID?
你还真会猜,一大串商品ID,用逗号隔开的,调用数据库中的自己写的表值函数进行处理成一张表,然后做更新操作[/quote] 但是作为参数是没有问题的啊。
  • 打赏
  • 举报
回复
引用 8 楼 happy09li 的回复:
[quote=引用 7 楼 SQL 的回复:] 帮助上面有的 如果消息字符串为非 Unicode 字符串,则最长不得超过 8,000 个字符;如果消息字符串为 Unicode 字符串,则最长不得超过 4,000 个字符。超过最大长度的字符串会被截断。varchar(max) 和 nvarchar(max) 数据类型均被截断为不大于 varchar(8000) 和 nvarchar(4000) 的数据类型。
但是我复制到word里面看了的,的的确确有1.6W多 如果用text 能支持多少?[/quote] print 就这么长,跟你定义的没关系
發糞塗牆 2013-11-15
  • 打赏
  • 举报
回复
我擦,我以前试过,直接无法生成执行计划,后来在传入前转换成表变量再当参数传进去,速度从小时降到2分钟,要不你别纠结这事吧
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
即使不截断,我估计问题更大,你那个参数传的是什么啊?类似一大串ID?
你还真会猜,一大串商品ID,用逗号隔开的,调用数据库中的自己写的表值函数进行处理成一张表,然后做更新操作
發糞塗牆 2013-11-15
  • 打赏
  • 举报
回复
即使不截断,我估计问题更大,你那个参数传的是什么啊?类似一大串ID?
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 11 楼 DBA_Huangzj 的回复:
据我使用,相当恶心,大量操作不支持这种LOB类型
只是传的 字符类型的,如果用text 是不是不会截断?
發糞塗牆 2013-11-15
  • 打赏
  • 举报
回复
据我使用,相当恶心,大量操作不支持这种LOB类型
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:
text就算了,别用为妙。
为什么?
發糞塗牆 2013-11-15
  • 打赏
  • 举报
回复
text就算了,别用为妙。
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 7 楼 SQL 的回复:
帮助上面有的 如果消息字符串为非 Unicode 字符串,则最长不得超过 8,000 个字符;如果消息字符串为 Unicode 字符串,则最长不得超过 4,000 个字符。超过最大长度的字符串会被截断。varchar(max) 和 nvarchar(max) 数据类型均被截断为不大于 varchar(8000) 和 nvarchar(4000) 的数据类型。
但是我复制到word里面看了的,的的确确有1.6W多 如果用text 能支持多少?
  • 打赏
  • 举报
回复
帮助上面有的 如果消息字符串为非 Unicode 字符串,则最长不得超过 8,000 个字符;如果消息字符串为 Unicode 字符串,则最长不得超过 4,000 个字符。超过最大长度的字符串会被截断。varchar(max) 和 nvarchar(max) 数据类型均被截断为不大于 varchar(8000) 和 nvarchar(4000) 的数据类型。
Yole 2013-11-15
  • 打赏
  • 举报
回复
我记得max的最大值应该是8000吧
熙风 2013-11-15
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
你是varchar(8000)还是max?
max
加载更多回复(4)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧