1

以下のステートメントが機能しない理由が不思議です。

insert into #temp (ip, ping) values ('ip', exec xp_cmdshell 'ping ip')

1つの列にIPアドレスがあり、そのサーバーからpingを実行する結果セットを取得したいと思います。上記のクエリはエラーを返します:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'exec'.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.

説明をよろしくお願いします。

4

2 に答える 2

2

まあ、insert ... exec柔軟性がないことで有名です。一つには、values句では機能しません。さらに厄介なのは、列リストをサポートしていないことです。テーブル内の列は、ストアド プロシージャの出力と正確に一致する必要があります。

使用する唯一の方法insert ... execは次のとおりです。

insert TableName exec(...)
--             ^^^--> no column list!

次に例を示します。

if exists (select * from tempdb.sys.tables where name like '#temp__%')
    drop table #temp

create table #temp (output varchar(max))
insert into #temp execute xp_cmdshell 'ping pong'
select * from #temp
于 2013-10-21T13:14:23.483 に答える