2008/10/08

在MS sql server 2005中,如何將預存程序(store procedure)的結果insert到table?

由於種種原因,有個需求 -- 要將預存程序(store procedure)的查詢結果,直接insert到table ,然後再由該table去取得資料!
一開始最直接的想法,就是利用 SELECT INTO 的方式,所以採用下述語法(以sp_who為範例,產生資料)
SELECT *
INTO #temptale
FROM (EXEC sp_who)

結果…天不從人願,sql server似乎不會將sp_who的結果當作一個table。後來改用配合 with 依舊也沒辦法…

忽然想到之前看到別人SQL資料隱碼攻擊(sql injection)的語法,覺得該語法應該可以在此利用,所以將原本的語法修改如下…

SELECT *
INTO #temptale
FROM OPENROWSET(
'SQLNCLI', 'Server=localhost;Trusted_Connection=yes;','sp_who')

果然,就可以將預存程序(store procedure)的結果直接塞入table,讓我後續利用了!

附註:
  • 以上指令其實是需要有適當的權限配合,方可執行!
  • 但很奇怪的是…我執行sp_who沒問題,但改以sp_who2卻會有錯誤!應該不會是因為sp_who2為非正式預存程序(store procedure)吧? :)

沒有留言:

Related Posts Plugin for WordPress, Blogger...