SQL Server 動態SQL

來源:互聯網
上載者:User

 

測試表/資料

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

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.