zoukankan      html  css  js  c++  java
  • SQL Server sp_executesql介绍和使用

    execute相信大家都用的用熟了,简写为exec,除了用来执行存储过程,一般都用来执行动态Sql 
    sp_executesql,sql2005中引入的新的系统存储过程,也是用来处理动态sql的, 如: 
    exec sp_executesql @sql, N'@count int out,@id varchar(20)', @cou out ,@id 
    @sql为拼成的动态sql 
    N'@count int out,@id varchar(20)'为拼成的动态sql内的参数列表 
    @cou out,@id为为动态sql内参数列表提供值的外部参数列表 

    那么它们之间有什么区别呢? 

    1、它们之间最大的区别是嵌入式的参数,如下面一个语句 
    DECLARE @sql NVARCHAR(2000); 
    DECLARE @id VARCHAR(20); 
    SET @id = '1'; 
    SET @sql = 'select count(*) from emp where id=' + @id; 
    EXEC @sql; 
    我想把得到的count(*)传出来,用传统的exec是不好办到的,但是用sp_executesql则很容易就办到了: 
    DECLARE @sql NVARCHAR(2000); 
    DECLARE @cou INT; 
    DECLARE @id VARCHAR(20); 
    SET @id = '1'; 
    SET @sql = 'select @count=count(*) from emp where id=@id'; 
    EXEC sp_executesql @sql, N'@count int out,@id varchar(20)', @cou OUT, @id; 
    PRINT @cou; 
    2、性能 
    可以看到,如果用exec,由于每次传入的@id不一样,所以每次生成的@sql就不一样,这样每执行一次Sql2005就必须重新将要执行的动态Sql重新编译一次 
    但是sp_executesql则不一样,由于将数值参数化,要执行的动态Sql永远不会变化,只是传入的参数的值在变化,那每次执行的时候就秒用重新编译,速度自然快多了哈! 

    注意: 
    1.sp_executesql要求动态Sql和动态Sql参数列表必须是Nvarchar,比如上个例子的@sql,N'@count int out,@id varchar(20)'我记得在sql2005中Varchar也可以的,但是我打了Sp3补丁后就不行了,必须为Nvarchar 
    2.动态Sql的参数列表与外部提供值的参数列表顺序必需一致,如: 
    N'@count int out,@id varchar(20)', @cou out,@id 
    @count 对应 @cou,@id对应@id 
    如果不一致,必须显式标明,如: 
    N'@count int out,@id varchar(20)', @id=@id, @count=@cou out 
    3.动态SQl的参数列表与外部提供参数的参数列表参数名可以同名
  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/9594681.html
Copyright © 2011-2022 走看看