zoukankan      html  css  js  c++  java
  • 动态SQL与SQL注入(一)动态SQL

    SQL Server提供了2个用于执行动态构造的代码字符串命令,分别为execsp_executesql.

    Exec 有两种用法:一种是执行一个存储过程。

    表结构及测试数据如下:

    create table [User]

    (

    userid int identity primary key,

    userName nvarchar(8),

    pwd nvarchar(18),

    city nvarchar(20),

    [type] bit,

    createtime datetime default getdate()

    )

    insert into [User] (userName,pwd,city,[type])

    select 'a','aa','beijing',1 union

    select 'b','bb','shanghai',1 union

    select 'c','cc','tianjin',0 union

    select 'd','dd','tianjin',0

     

    存储过程如下:

    create procedure pro_GetUserbyCity

    @City nvarchar(20)

    as

    begin

    select * from [user] where city=@City

    end

    执行存储过程:

    exec pro_GetUserbyCity 'tianjin'

    另一种用来执行字符串:

    Execstring)必须用括号括起来

    declare @city nvarchar(20), @sql nvarchar(50)

    set @city='tianjin'

    --set @sql='select * from [user] where city='''+CONVERT(nvarchar,@city)+'''' --SQL注入危险

    set @sql='select * from [user] where city='+QUOTENAME(@city,'''')

    print @sql

    exec(@sql)

    执行结果同上

    sp_executesql:可以提供输入参数和输出参数:此外sql 语句必须是unicodenvarchar)类型的

    用法:

    Exec sp_executesql

    @sql,--要执行的语句

    @params --语句当中的参数

    @assignment—给参数赋值

    declare @city nvarchar(20), @sql nvarchar(50)

    set @city='tianjin'

    set @sql=N'select * from [user] where city=@c'

    print @sql

    exec sP_executesql @sql,N'@c as nvarchar(20)',@city

    执行结果同上

    带返回值的

    declare @city nvarchar(20), @sql nvarchar(100),@num int

    set @city='tianjin'

    set @sql=N'select @n=count(*) from [user] where city=@c;select @n;'

    print @sql

    exec sP_executesql @sql,N'@c as nvarchar(20),@n as int output',@city,@num

    执行结果如下


    作 者:清水无鱼
    出 处:http://www.cnblogs.com/wzpo/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    数据结构与算法之PHP实现二叉树的遍历
    数据结构与算法之二叉树的基本概念和类型
    聚集索引,非聚集索引,覆盖索引 原理
    Vue学习笔记:methods、computed、watch的区别
    xsl 和xml transform方法的调用
    Chrome , Firfox 不支持fireEvent的方法
    分布式存储
    firefox并不支持selectSingleNode和selectNodes的解决方法
    503 Service Unavailable
    处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
  • 原文地址:https://www.cnblogs.com/wzpo/p/1734620.html
Copyright © 2011-2022 走看看