zoukankan      html  css  js  c++  java
  • SQL Server 动态SQL

    测试表/数据

    CREATE TABLE test_dysql (

    id     INT,

    name   VARCHAR(10),

    val    INT

    );

    INSERT INTO test_dysql(id, name, val) VALUES (1, 'A', 10);

    INSERT INTO test_dysql(id, name, val) VALUES (2, 'B', 20);

    INSERT INTO test_dysql(id, name, val) VALUES (3, 'C', 30);

    INSERT INTO test_dysql(id, name, val) VALUES (4, 'D', 40);

    INSERT INTO test_dysql(id, name, val) VALUES (5, 'E', 50);

    直接执行的方式

    简单执行

    1> BEGIN

    2>   EXECUTE ( 'SELECT * FROM test_dysql WHERE id=1' );

    3> END

    4> go

    id          name       val

    ----------- ---------- -----------

              1 A                   10

    (1 行受影响)

    游标方式获取

    1> BEGIN

    2>   DECLARE @Sql varchar(200);

    3>   DECLARE @name varchar(10);

    4>   SET @Sql='DECLARE cur CURSOR for select [name] from test_dysql';

    5>   EXEC(@Sql);

    6>

    7>   OPEN cur;

    8>   FETCH next FROM cur INTO @name;

    9>   WHILE @@FETCH_STATUS=0

    10>   BEGIN

    11>       PRINT @name;

    12>       FETCH next FROM cur INTO @name;

    13>   END

    14>   CLOSE cur;

    15>   DEALLOCATE cur;

    16> END

    17> go

    A

    B

    C

    D

    E

    执行存储过程的方式

    简单的执行

    注意, SQL Server SP_EXECUTESQL 要求参数时 NVARCHAR 类型

    因此这里 SQL 语句的前面,加了 字母 N

    1> BEGIN

    2>   EXEC SP_EXECUTESQL N'SELECT * FROM test_dysql WHERE id=1';

    3> END

    4> go

    id          name       val

    ----------- ---------- -----------

              1 A                   10

    (1 行受影响)

    参数的传入

    1> BEGIN

    2>   DECLARE @Sql NVARCHAR(200);

    3>   DECLARE @id INT;

    4>   DECLARE @name VARCHAR(10);

    5>   SET @id = 1;

    6>   SET @name = 'C';

    7>   SET @Sql = 'SELECT * FROM test_dysql WHERE id=@id OR name=@name';

    8>   PRINT @Sql;

    9>   EXEC SP_EXECUTESQL @Sql, N'@id INT, @name VARCHAR(10)', @id, @name;

    10> END

    11> go

    SELECT * FROM test_dysql WHERE id=@id OR name=@name

    id          name       val

    ----------- ---------- -----------

              1 A                   10

              3 C                   30

    (2 行受影响)

    单条结果的获取

    SQL Server

    通过

    SP_EXECUTESQL

    的第2个参数来定义有哪些参数

    输出的加OUTPUT

    后面的参数为执行的时候,具体参数的数据。输出的加OUTPUT

    1> BEGIN

    2>   DECLARE @Sql NVARCHAR(200);

    3>   DECLARE @name VARCHAR(10);

    4>   SET @Sql = 'SELECT @name = name FROM test_dysql WHERE id=1';

    5>   PRINT @Sql;

    6>   EXEC SP_EXECUTESQL @Sql, N'@name VARCHAR(10) OUTPUT', @name OUTPUT;

    7>   PRINT @name;

    8> END

    9> go

    SELECT @name = name FROM test_dysql WHERE id=1

    A

  • 相关阅读:
    每日日报1
    shazidouhui的使用体验
    水滴的使用体验
    麻雀记的使用体验
    钢镚儿的使用体验
    TD课程通的使用体验
    01 fs模块
    0 mysql 安装
    slot
    vue引入 lodash
  • 原文地址:https://www.cnblogs.com/moss_tan_jun/p/2010785.html
Copyright © 2011-2022 走看看