測試表/資料
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