日期:2014-05-19  浏览次数:20513 次

存储过程(函数)里面的参数和变量该如何设置可达到最佳?
对于传进去的参数,如果我不能确定他的长度,比如对某个表的
查询条件,这个条件是用户是动态生成的(完全有可能超过1000),
那么我定义的存储过程的时候一般使用
pr_SelectUserTable         @tblName   varchar(20),@sqlstr   varchar(5000)
--假设他不会超过5000,
我想知道这样定义对系统的性能是不是有很大影响?

另外,在存储过程里面,也有可能定义一个比较大的变量来保存一些
SQL语句,用于最后的执行。对于这个变量又该怎么定义最好?
比如:
      declare   @sql   nvarchar(5000)     --或   varchar(5000)
      set   @sql   =   'Select   *   from   '+@tblName+ '   where   '+@sqlstr
      Exec(@sql)
这样定义是不是对系统又有很大影响?那该怎么优化。


------解决方案--------------------
一般如果知道@sql的最大长度,就设为那个数就好了,如果不知道,就要设VARCHAR最大8000或者NVARCHAR最大4000,但要防止超过8000
------解决方案--------------------
declare @sql nvarchar(5000) --这个定义有问题

==
nvarchar(n)

包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。

------解决方案--------------------
如果是考虑SP传入参数对于网络传输的影响,只由传入的语句串长度决定,不论是char还是varchar都是一样的,长度没有影响。
------解决方案--------------------
如果是sql2005有max属性,可以设置长度。哈哈。。。