博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

SQL Server 动态SQL

Posted on 2011-04-09 21:23  moss_tan_jun  阅读(451)  评论(0编辑  收藏  举报

 

测试表/数据

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