带参数的sql和不带参数的sql存储过程区别

 更新时间:2008年09月03日 00:27:14   作者:  
来执行我们sql语句,看到很多分页存储过程都是直接拼凑sql语句然后用exec('')执行起来了,这个从效率和安全上面来说,都是不推荐的。

cmd.Connection.Open();
cmd.ExecuteNonQuery();
//第一次执行结束
cmd.Parameters.Clear();
cmd.CommandText = "SELECT SCOPE_IDENTITY()";

//System.Diagnostics.Debug.Assert(cmd.ExecuteScalar()==null);

Console.WriteLine(cmd.ExecuteScalar().ToString());
//第二次执行结束
cmd.Connection.Close();

Console.WriteLine("第一次测试结束");
Console.Read();

cmd.CommandText = "insert into lcs_Sys_Model ([Model_GUID],[Model_Name],[Model_Desp],[Model_IsSys]) values ( 'F3CD1369-58C0-4A1F-AF88-05FCF734E079','name','desp',1 )";
cmd.Connection.Open();
cmd.ExecuteNonQuery();

cmd.CommandText = "SELECT SCOPE_IDENTITY()";
Console.WriteLine(cmd.ExecuteScalar().ToString());
cmd.Connection.Close();
Console.WriteLine("第二次测试结束");
Console.Read();


本来想用参数化的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('')执行起来了,这个从效率和安全上面来说,都是不推荐的。

相关文章

  • Mybatis查询延迟加载详解及实例

    Mybatis查询延迟加载详解及实例

    这篇文章主要介绍了Mybatis查询延迟加载详解及实例的相关资料,Mybatis的延迟加载默认是关闭的,即默认是一次就将所有的嵌套SQL一并查了将对象所有的信息都查询出来。开启延迟加载有两种方式,需要的朋友可以参考下
    2017-01-01
  • 快速解决openGauss数据库pg_xlog爆满问题

    快速解决openGauss数据库pg_xlog爆满问题

    这篇文章主要介绍了openGauss数据库pg_xlog爆满问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • ETL方法与过程讲解

    ETL方法与过程讲解

    这篇文章主要介绍了ETL方法与过程讲解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 通过一分钟快速了解索引技巧

    通过一分钟快速了解索引技巧

    这篇文章主要给大家介绍了如何通过一分钟快速了解索引技巧的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用索引具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • GaussDB数据库何创建修改数据库和数据表的方法

    GaussDB数据库何创建修改数据库和数据表的方法

    GaussDB 是一款由华为开发的企业级分布式数据库,具有高性能、高可用、高可靠性等特点,广泛应用于各种业务场景,本指南将介绍如何在 GaussDB 中创建数据库和数据表,修改表结构,并添加约束,需要的朋友可以参考下
    2024-06-06
  • where 子句的执行顺序

    where 子句的执行顺序

    貌似在2005之前的版本中,where子句的顺序是从前往后的。但是又貌似在2005的版本中进行了优化,所有的顺序都被统一成了以过滤能力进行排序的语句。
    2009-04-04
  • redis数据库查找key在内存中的位置的方法

    redis数据库查找key在内存中的位置的方法

    这篇文章主要介绍了redis数据库查找key在内存中的位置的方法,需要的朋友可以参考下
    2014-03-03
  • navicat删除oracle表的操作方法

    navicat删除oracle表的操作方法

    在本篇文章中我们给大家分享一篇关于navicat怎么删除oracle表的相关内容,有需要的朋友们跟着学习下。
    2019-08-08
  • SQLyog下载、安装超详细教程(亲测永久有效)

    SQLyog下载、安装超详细教程(亲测永久有效)

    SQLyog能够帮助用户轻松管理自己的MYSQL数据库,SQLyog中文版支持多种数据格式导出,可以快速帮助用户备份和恢复数据,还能够快速地运行SQL脚本文件,为用户的使用提供便捷
    2021-04-04
  • hadoop map-reduce中的文件并发操作

    hadoop map-reduce中的文件并发操作

    hadoop mapreduce最主要的应用是基于键值对的数据的运算,过滤,提取。但除此之外,我们可以顺带利用mapreduce高并发的特性做一些用常用方法难以处理的问题,比如大量数据,大量文件的并发读写
    2014-04-04

最新评论