• 两种动态SQL


    参考:
    http://www.cnblogs.com/wanyuan8/archive/2011/11/09/2243483.html
    http://www.cnblogs.com/xbf321/archive/2008/11/02/1325067.html

    两种动态SQL
      1. EXEC (@sql)
      2. EXEC sp_executesql

    性能:
    sp_executesql提供了输入输出接口,更具有优势
    sp_executesql根据参数重用执行计划,不需要每一次都重新编译,提高了执行性能; EXEC因为每次构建的@sql字符串不一样,必须重新编译
    除非您有令人信服的理由使用EXEC,否侧尽量使用sp_executesql

    注意:(执行动态sql时候,防止sql注入攻击)


    1. 使用EXEC(@sql)时,如果您想访问变量,必须把变量内容串联到动态构建的代码字符串中

    declare @sql nvarchar(200) 
    declare @id varchar(20)
    set @id='1' 
    set @sql='select * from SMCN_CUList_China where Rownum_id = ' + @id 
    exec (@sql)

    2. sp_executesql后面跟有三部份,分别是 @stmt, @params, params_assignment

    declare @sql nvarchar(200) 
    declare @id varchar(20)
    declare @count int
    set @id='1' 
    set @sql='select @count = count(1) from t_a where Rownum_id = @id' 
    exec sp_executesql @sql, N'@count int out,@id varchar(20)',@count out,@id
    select @count

    sp_executesql使用:

      sp_executesql要求动态Sql (即@stmt部分) 和动态Sql参数列表 (即@params部分) 必须是Nvarchar
      N'@count int out,@id varchar(20)' 是@stmt内的参数列表; @count out,@id 是为@params参数列表提供值的外部参数列表
      sp_executesql 参数列表@params与外部提供值的参数列表params_assignment的顺序必需一致; 如果不一致,必须显式标明,如 @id=@id, @count=@count out
      动态SQl的参数列表与外部提供参数的参数列表参数名可以同名

  • 相关阅读:
    牛客算法周周练2
    牛客算法周周练2
    2020年7月7日Java学习日记
    2020年7月6日Java学习日记
    练习29--if语句
    练习28--布尔练习
    练习27--记忆逻辑
    第18~19讲课后作业
    第20讲:内嵌函数和闭包
    练习25--更多更多练习
  • 原文地址:https://www.cnblogs.com/lynhou/p/6737830.html
Copyright © 2020-2023  润新知