存储过程变量字符串太长

xinkejun 2004-04-16 07:18:41
我在存储过程中定义变量@sql var(8000)
然后不停的循环(用union all合并表)
到某时刻,系统告诉我执行错误,我把@sql打出来一看,也就几百个字符,就截断了,请问高手如何解决,感激不尽。
...全文
681 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinkejun 2004-04-16
  • 打赏
  • 举报
回复
以下是我执行的过程(模仿邹建兄合并多个数据库的例子),中间那段语句加长就不行了

CREATE PROC P_SCM_XMNR_H AS

declare @sql char(8000)

set @sql = ''

select @sql = @sql + '
select 编号=fld_xysbh
,产品名称=max(case when fld_zh=1 and fld_th=1 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,产品型号=max(case when fld_zh=1 and fld_th=2 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
,功能=max(case when fld_zh=1 and fld_th=4 and fld_kh=0 and fld_xh=1 then fld_xmnr else '''' end)
。。。。。。。。。。。。。。。。。。。。。

from xys.dbo.'
+ name + ' group by fld_xysbh' + ' union all '
from xys.dbo.sysobjects where xtype='u' and name like 'tab[_]xmnr%'

if len(@sql) > 10
begin
set @sql = left(@sql, len(@sql) - 10)
exec(@sql)
end

print @sql
GO
progress99 2004-04-16
  • 打赏
  • 举报
回复
exec(@sql1+@sql2+...+@sqln)
progress99 2004-04-16
  • 打赏
  • 举报
回复
如果真的超過了8000,你就隻能定義多個變量了,text類型不支持變量定義。

ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。

ntext

可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。

text

服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。

image

可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。

progress99 2004-04-16
  • 打赏
  • 举报
回复
char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型。

char[(n)]

长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。

varchar[(n)]

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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