SQL中的声明变量长度没有限制,如何做?

SQL中的声明变量长度没有限制,如何做?,第1张

SQL Server
char 定长,最大8000
varchar 变长
SQL Server2005后 可以通过 varchar(MAX)来允许最大存储2G的数据
text 最多存储有2G字符
nchar 定长,最大4000国际化字符
nvarchar 变长。
ntext 最多存储有1G 国际化字符

为此,数据库引擎获取尽可能多的可用内存,同时保留足够的可用内存以防 *** 作系统交换内存。SQL Server 实例在启动时通常获取8到12MB的内存以完成初始化过程。当实例完成初始化后,就不会再获取更多的内存,直到用户连接到该实例并开始产生工作负荷。这时,该实例根据需要不停地获取内存以支持工作负荷。随着更多的用户连接并运行查询,SQL Server 将获取支持需求所需的额外内存。该实例将继续获取内存直到达到自身的内存分配目标,并且直到达到该目标的下限才会释放任何内存。为了在不产生多余换页 I/O 的情况下获取尽可能多的内存,SQL Server 的每个实例都配置一个内存获取目标,直到电脑的可用物理内存在4MB到10MB的范围内。之所以选择该范围是因为测试表明 Windows NT 和 Windows 2000 都有最小内存交换,直到内存分配等于可用物理内存减去4MB。工作负荷处理任务重的 SQL Server 实例保留的可用物理内存为范围的较低端 (4MB);工作负荷处理任务轻的实例保留的可用物理内存为范围的较高端 (10MB)。SQL Server 实例的目标随工作负荷的改变而变化。当更多的用户连接并产生更多的工作时,该实例倾向于获取更多的内存以使可用的内存保持在4MB的限制以下。当工作负荷减轻时,该实例将其目标调整为 10MB的可用空间,并释放内存给 *** 作系统。将可用空间量保持在10MB和4MB之间可防止 Windows NT 或 Windows 2000 过多执行换页 *** 作,同时使 SQL Server 得以获得尽可能最大的高速缓冲存储器而不至引起额外的交换。实例的目标内存配置和数据库缓冲池的页相对于可用池大小的需求有关。在任何实时点,缓冲区页的总需求取决于满足任何当前执行的查询所需的数据页数。假如相对于高速缓冲存储器内的页数,数据页的需求很大,则当前在缓冲区内的每一页很可能在相对较短的时间内由新页替换。这可由缓冲区管理器对象的页生命期性能计数器来度量。对于相对较小的缓冲区有较高需求的情况将生成短生命期,而纯粹的影响就是使 I/O 增加,因为在页可由多个逻辑读取引用之前往往要被重写。为减轻这个问题,数据库引擎能够获取更多的内存以增加高速缓冲存储器的大小。当页生命期长时,数据库引擎将可用内存定位于目标的高端 (10 MB);而当页生命期短时,数据库引擎定位于目标范围的低端 (4MB)。随着其他应用程式在运行 SQL Server 实例的电脑上启动,他们消耗内存致使可用物理内存量降到 SQL Server 的目标以下。SQL Server 实例于是从其地址空间释放足够内存,以使可用内存量回到 SQL Server 的目标。假如有其他应用程式停止运行而使可用内存增多,SQL Server 实例将增加其内存分配大小。SQL Server 能够每秒释放并获取几MB字节的内存,这使他得以根据内存分配变化作出快速调整。您能够通过配置允许sql server能够使用的最大内存来做限制:最小和最大服务器内存的影响min server memory 和 max server memory 配置选项建立由 SQL Server 数据库引擎使用的内存量的上限和下限。数据库引擎并不立即获取 min server memory 中指定的内存量。数据库引擎启动时只使用初始化所需的内存。随着数据库引擎工作负荷的增加,他将继续获取支持工作负荷所需的内存。数据库引擎直到到达 min server memory 中指定的内存量才会释放任何所需的内存。一旦到达 min server memory,数据库引擎将使用标准算法(使 *** 作系统的可用内存保持在 4MB到 10MB之间)获取和释放所需内存。唯一的区别是数据库引擎从不将内存分配降到 min server memory 所指定的水平下,也从不获取超过max server memory 所指定水平的内存。数据库引擎获取的内存量完全取决于放置在实例上的工作负荷。不处理很多请求的 SQL Server 实例可能永远达不到 min server memory。假如为 min server memory 和 max server memory 指定相同的值,则一旦分配给数据库引擎的内存达到该值,数据库引擎将停止动态释放和获取内存。假如在运行 SQL Server 实例的电脑上频繁启动或停止其他应用程式,启动这些应用程式所需的时间可能会因 SQL Server 实例分配和释放内存而延长。另外,假如 SQL Server 是几个在一台电脑上运行的服务器应用程式中的一个,系统管理员可能需要控制分配给 SQL Server 的内存量。

字符串长度大于sql
需要修改长字符串的内容,此时如果用declare定义变量手动修改后再用字符串copy进去,也可以解决。
但是如果此时字符串长度特别长,远远超过32k,那么可以考虑正则表达式直接替换
SQL里面的replace方法
如下,要加下面表中的name从’很好‘的好字更新成其他字符串

你用的是sql server 2008 r2 express版本
该版本只支持单个双核CPU 2G内存和最大2G的数据库
换句话说就是让你学习sql的玩具
想使用更多功能,请使用sql server 2008 r2 开发版(Developer ) 或 企业版(Enterprise) 或 标准版(Standard),安装程序大约4个多G

分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:

ms sql数据库压缩太大,而压缩不起作用我的ms sql数据库只有一个表,不到十万条数据,可却达到3G,而压缩只能减少几M而已,我觉得不应该这么大,以前我有个数据库我十几个表,数据也有几十万,而才1G多,这是怎么回事?有什么办法能让它大幅度压缩一下!另外:我现在这个数据库是从几个ACCESS中导入的,和这个有关系吗?日志只有不到1M,库文件则3G多,备份文件有2G多,这样重新建库也应该不小吧,另外库里存的只是文字而已大家帮帮忙

解析:

清空日志可以压缩一半的空间

(如果你不需要历史 *** 作记录的话)

还有,表字段类型也可以压缩,比如把datetime改成 alldatetime类型就可以省下该字段占用的一半的空间,把char改为varchar可以省下该字段所占用的空间等等,如果可以的话,text类型尽量改为varchar类型


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13380286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-25
下一篇 2023-07-25

发表评论

登录后才能评论

评论列表(0条)

保存