拼吾爱程序人生

首页 » 数据库编程 » SQL » 带参数的sql和不带参数的sql区别
cobra - 2008-9-3 21:51:00
带参数的sql语句,在数据库端,执行的是
exec sp_executesql

eg:

exec sp_executesql N'insert into LCS_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( @Model_GUID,@Model_Name,@Model_Desp,@Model_IsSys)', N'@Model_GUID uniqueidentifier,@Model_Name nvarchar(50),@Model_Desp nvarchar(500),@Model_IsSys bit', @Model_GUID = 'F3CD1369-58C0-4A1F-AF88-05FCF734E079', @Model_Name = N'测试实体模型', @Model_Desp = N'实体模型描述', @Model_IsSys = 0


没有带值的sql语句。其执行是直接的sql语句。
insert into lcs_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( 'F3CD1369-58C0-4A1F-AF88-05FCF734E079','name','desp',1 )

看上面的执行代码,你会不会认为是下面的高效啊?说实话我也没有仔细测试过。可是据我所知,sqlserver能够缓存参数信息和sql编译后的信息,第一句带参 数的sql因为前面一部是不变的(红色部分)。所以能够缓存起来(就像执行存储过程一样)。而下面的一句sql。因为value后面的值总是不固定,因此 sqlserver总是认为是不同的sql语句。因此每次都要重新编译生成。




以上结论来源于下面的测试代码。
http://space.cnblogs.com/question/2692/

Code


本来想用参数化的sql插入一条记录再取回自增的值的。发现数据库端是这个执行方式。那就没戏啦。。。只能改变sql语句。把自增放到sql的最后去取啦。。

exec sp_executesql N'insert into LCS_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( @Model_GUID,@Model_Name,@Model_Desp,@Model_IsSys)', N'@Model_GUID uniqueidentifier,@Model_Name nvarchar(50),@Model_Desp nvarchar(500),@Model_IsSys bit', @Model_GUID = 'F3CD1369-58C0-4A1F-AF88-05FCF734E079', @Model_Name = N'测试实体模型', @Model_Desp = N'实体模型描述', @Model_IsSys = 0

SELECT SCOPE_IDENTITY()

在查询分析器里面最后确认运行一下。。。这二个是不同的范围的,是取不到值的。。



最后提配一点,为了性能和安全,我们在写存储过程的时候也要使用

exec sp_executesql  '带参数的sql语句','参数定义语句,多个参数用,号分隔',参数赋值1,参数赋值2,参数赋值3```
来执行我们sql语句,看到很多分页存储过程都是直接拼凑sql语句然后用exec('')执行起来了,这个从效率和安全上面来说,都是不推荐的。





(文/luchaoshuai  出处/博客园)

 您可能对 [SQL] 的这些文章也感兴趣:

SQL循序渐进(21)更多的子查询
优化.NET访问Active Directory的性能
NHibernate之旅(9):探索父子关系(一对多关系)
iBATIS In Action:执行非查询语句(一)
IBatis.Net使用方法之三:数据库的缓存模式
网络数据库设计入门(二)SQL语言及其优点
Spring.Net + NHibernate 入门例子
教你轻松学会用SQL Mail来创建日常报告
破解SQL Prompt3
基于.NET平台开源的数据持久框架:NHibernate 2.0.0.Beta1发布
1
查看完整版本: 带参数的sql和不带参数的sql区别
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: