系统中存放“存贮过程”的字段是nvarchar型,但是如果存贮过程超过4000个字符,会如何存贮呢?

时间:2022-02-07 13:26:17
系统中存放“存贮过程”的字段是nvarchar型,但是如果存贮过程超过4000个字符,会如何存贮呢?
----------------------------------------
如题,
好象存贮过程是没有大小限制的,如果一个程序写得很多,有可能远远超过4000个字符呀,
此时如何处理呢?
nvarchar型字段只能容纳4000个字符呀?
syscomments表中存放的就有存贮过程,字段名称为text,类型是nvarchar(4000)型。
另外,还有一个 ctext,varbinary型,我不知这个字段是做什么用的?

10 个解决方案

#1


截断,不存储了.

也有可能直接报错,不让你保存.

#2


不是很清楚楼主的最终意思,我的理解是动态构造SQL,当nvarchar型字符拼串超过4000时,会被截断.遇到这种情况可以考用多变量拼接,再EXEC(@!+@2+@3...)

#3


楼主的意思是在系统表syscomments中的text字段是nvarchar(4000)
这个字段会截断的
可以试试这个
sp_helptext '存储过程名'

#4


看帮助中对syscomments的解释

#5


大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

#6


引用 5 楼 ykqlyy 的回复:
大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

看3楼,不过应该有更好的方法

#7


哦,原来text列是一列装不完,留到下一列

#8


引用 6 楼 kerafan 的回复:
引用 5 楼 ykqlyy 的回复:
大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

看3楼,不过应该有更好的方法

我是问如何存贮的,
sp_helptext的作用是查看,这个我知道,但是我不知系统是如何将超过4000个字符的存贮过程存到nvarchar(4000)的字段中的?

#9


引用 7 楼 kerafan 的回复:
哦,原来text列是一列装不完,留到下一列

什么意思,谢谢。

#10


引用 8 楼 ykqlyy 的回复:
引用 6 楼 kerafan 的回复:

引用 5 楼 ykqlyy 的回复:
大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

看3楼,不过应该有更好的方法

我是问如何存贮的,
……

看7楼,一个text行装不完是会产生第二行,知道保存完整为止

select text from syscomments where id=object_id('p_changeHallNameForAvgScore')

--结果
/*

(2 行受影响)
*/

#1


截断,不存储了.

也有可能直接报错,不让你保存.

#2


不是很清楚楼主的最终意思,我的理解是动态构造SQL,当nvarchar型字符拼串超过4000时,会被截断.遇到这种情况可以考用多变量拼接,再EXEC(@!+@2+@3...)

#3


楼主的意思是在系统表syscomments中的text字段是nvarchar(4000)
这个字段会截断的
可以试试这个
sp_helptext '存储过程名'

#4


看帮助中对syscomments的解释

#5


大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

#6


引用 5 楼 ykqlyy 的回复:
大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

看3楼,不过应该有更好的方法

#7


哦,原来text列是一列装不完,留到下一列

#8


引用 6 楼 kerafan 的回复:
引用 5 楼 ykqlyy 的回复:
大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

看3楼,不过应该有更好的方法

我是问如何存贮的,
sp_helptext的作用是查看,这个我知道,但是我不知系统是如何将超过4000个字符的存贮过程存到nvarchar(4000)的字段中的?

#9


引用 7 楼 kerafan 的回复:
哦,原来text列是一列装不完,留到下一列

什么意思,谢谢。

#10


引用 8 楼 ykqlyy 的回复:
引用 6 楼 kerafan 的回复:

引用 5 楼 ykqlyy 的回复:
大家没明白我的意思,我是问:
我们写的存贮过程,都会存贮过
ssycommnets中的text字段中,但是当我们的程序很大时,text字段容不下时,
系统如何保存的,系统一定保存住了,但是我不知如何实现保存大的程序的,假如程序代码超过1万行。

看3楼,不过应该有更好的方法

我是问如何存贮的,
……

看7楼,一个text行装不完是会产生第二行,知道保存完整为止

select text from syscomments where id=object_id('p_changeHallNameForAvgScore')

--结果
/*

(2 行受影响)
*/