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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    警惕 InnoDB 和 MyISAM 创建 Hash 索引陷阱
    从头认识java-18.2 主要的线程机制(5)-守护线程与非守护线程
    leetcode
    算法学习笔记(五) 递归之 高速幂、斐波那契矩阵加速
    No WebApplicationContext found: no ContextLoaderListener registered?报错解决
    poj 3041 Asteroids (最小点覆盖)
    C语言函数--E
    APDU命令的结构和处理【转】
    Linux ALSA声卡驱动之一:ALSA架构简介【转】
    Linux 系统内核空间与用户空间通信的实现与分析
  • 原文地址:https://www.cnblogs.com/wzpo/p/1734620.html
Copyright © 2011-2022 走看看