关于SQL Server 2008中变量定义的问题

如某表中有个字段field类型为varchar(50),在写脚本时申明一个变量DECLARE@Fieldasvarchar(128),然后SET@Field=‘123’,... 如某表中有个字段field类型为varchar(50),在写脚本时申明一个变量DECLARE @Field as varchar(128),然后SET @Field = ‘123’,变量的长度没有超过字段的长度,可是变量申明时的长度128>50,这会不会在性能、内存上面造成影响,会造成什么影响? 展开
 我来答
big__down
2013-08-09
知道答主
回答量:40
采纳率:50%
帮助的人:10.1万
展开全部
这个问题我也在纳闷。不过你的变量的长度并没有超过字段的长度,虽然看似浪费内存,不过,在你数据库里面的数据量不多是时候这些都可以忽略不计的,性能上内存上影响不大,毕竟这不是一个关键性问题,在很多数据处理方面总会碰到这个问题,公司设计的时候也是这么处理的,所以我猜测,128和50并没有什么大问题,希望对你有所帮助
追问
谢谢,我是这么想的:因为申明了变量长度为128,因此内存会为它开辟128个大小的空间,但是实际只用到50,那么128大小的空间实际有78没用,那是不是就造成了浪费了?
追答
对,我懂你意思。不过这无关紧要的,那你想想,你开辟的50你全用到了吗?
szm341
2013-08-09 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5120万
展开全部
数据库中的变量定义是不会事先开辟内存的,就像程序中的变量要实例化才回去分配空间
假如定义时就分配的话,那么在同一个存储过程中定义多个varchar(max)--2GB
那服务器直接挂了~
而且像varchar这种变长类型,只会分配录入长度的空间,不会把空间全部分配出来
而想char这种定长类型则会全部分配长度空间
变量在存储过程中的生命周期可谓是稍纵即逝,存储过程如果要执行个几十分钟那就要疯掉了(不过有的公司需要大数据量存储的话可能会这样)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式