测试表/数据
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