3
exec master..xp_cmdshell 'set'

xp_cmdshellを使用せずにOS一時ディレクトリを取得する必要があります。私はMSSQL2008を使用しています。それを行うための最良の方法は何ですか?

そうですね、TSQLからそれを行う方法はないようです。SQL Serverは%temp%を使用する必要があるため、それを知っていると思いますが、まあ。

さて、誰かがこのコードをよりコンパクト/タイトにする方法をお勧めできますか?

Set NoCount On
Declare @t VarChar(256)
Declare @env Table ( [Parts] VarChar(256) )
Insert Into @env 
Exec Master..Xp_CmdShell 'set' 
Set @t = (  Select Top 1 [Parts] From @env Where [Parts] Like 'temp=%'  )
Select Replace(@t , 'temp=','' )

ありがとう。

4

4 に答える 4

2

環境変数%TEMP%または%TMP%. ただし、これにより、サービス アカウント フォルダーが提供されます。「一般的な」ものは%WINIR%\Temp

これは、日常の SQL で通常行うことではありません。

于 2011-01-13T18:52:54.417 に答える
1

tempdb データベースで使用されるファイルの場所は、次のコマンドを実行するとすぐに見つかります。

execute tempdb.dbo.sp_helpfile

(編集)

...それはあなたが探しているものではありませんよね? sp_OA の手順に飛び込まない限り、この種の OS 情報にアクセスする簡単な方法はないと思います。

于 2011-01-13T18:47:54.230 に答える
0

OLE オブジェクトを使用してScripting.FileSystem、Windows temp フォルダーを取得できます。

declare 
    @tempFolder varchar(260),
    @oleResult int,
    @fs int,
    @folder int;    

    exec @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @fs output;
    exec @OLEResult = sp_OAMethod @fs, 'GetSpecialFolder', @folder output, 2        
    exec sp_OAGetProperty @folder , 'Path', @tempfolder OUT
    exec @oleResult = sp_OADestroy @folder
    exec @oleResult = sp_OADestroy @FS

    select @tempFolder
于 2018-04-11T16:20:31.850 に答える
0

SSMS を管理者として実行してみてください。

このリンクをチェックしてください....

http://blogs.msdn.com/b/spike/archive/2008/07/23/ole-db-provider-microsoft-jet-oledb-4-0-for-linked-server-null-returned-message- unspecified-error.aspx

于 2013-11-27T11:49:58.163 に答える