zoukankan      html  css  js  c++  java
  • Sql语句拼接(EXEC和sp_executesql的区别)

    1.前言

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;
    通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。
    还有一个最大的好处就是利用sp_executesql,能够重用执行计划,
    这就大大提供了执行性能(对于这个我在后面的例子中会详加说明),
    还可以编写更安全的代码。EXEC在某些情况下会更灵活。
    除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql.

    2.EXEC的使用

    EXEC命令有两种用法,一种是执行一个存储过程,另一种是执行一个动态的批处理。以下所讲的都是第二种用法。

    DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@Num INT;
    SET @TableName = 'wolf_example';
    SET @Num = 20038;
    EXEC('SELECT * FROM ' + @TableName +' WHERE Num = '+ @Num +' ORDER BY Num DESC') --正常
    
    SET @sql='SELECT * FROM ' + @TableName +' WHERE Num = '+ @Num +' ORDER BY Num DESC'; 
    EXEC(@sql); --异常

     3.sp_executesql的使用

    DECLARE @TableName VARCHAR(50),@Sql NVARCHAR(MAX),@Num INT;
    SET @TableName = 'wolf_example';
    SET @Num = 20038;
    SET @sql='SELECT * FROM ' + @TableName +' WHERE Num = '+ CAST(@Num as varchar(10)) +' ORDER BY Num DESC'; 
    EXEC sp_executesql @sql; --正常
    DECLARE @Sql NVARCHAR(MAX);
    DECLARE @ONum as INT;
    SET @Sql='SELECT @OutNum=num FROM wolf_example WHERE Num = @Num AND Name=@Name'; 
    EXEC sp_executesql
       @Sql, 
       N'@Num as INT,@Name as VARCHAR(50),@OutNum as INT OUTPUT', 
       @Num = 20038,
       @Name= '11',
       @OutNum = @ONum OUTPUT
    SELECT @ONum 
  • 相关阅读:
    Html禁止粘贴 复制 剪切
    表单标签
    自构BeanHandler(用BeansUtils)
    spring配置中引入properties
    How Subcontracting Cockpit ME2ON creates SD delivery?
    cascadia code一款很好看的微软字体
    How condition value calculated in sap
    Code in SAP query
    SO Pricing not updated for partial billing items
    Javascript learning
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/7484610.html
Copyright © 2011-2022 走看看