SQL Server Temp Dir? - PullRequest
       3

SQL Server Temp Dir?

3 голосов
/ 13 января 2011
exec master..xp_cmdshell 'set'

Мне нужно получить временный каталог ОС, не прибегая к использованию xp_cmdshell.Я использую MSSQL 2008. Как мне лучше всего это сделать?

Что ж, похоже, нет способа сделать это из 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 ]

2 голосов
/ 13 января 2011

Для чтения переменных среды %TEMP% или %TMP% необходимо использовать xp_cmdshell или некоторую CLR (не уверен в разрешениях). Это дает вам папку учетной записи службы, хотя. «Обычный» - это %WINIR%\Temp

Это не то, что вы обычно делаете в повседневной SQL

1 голос
/ 27 ноября 2013

Попробуйте запустить 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

1 голос
/ 13 января 2011

Расположение файла, используемого базой данных tempdb, можно быстро найти, набрав

execute tempdb.dbo.sp_helpfile

(edit)

... это не то, что вы ищетеЭто?Если не вдаваться в процедуры sp_OA, я не думаю, что существует какой-либо простой способ доступа к информации об ОС такого типа.

0 голосов
/ 11 апреля 2018

Вы можете использовать объект Scripting.FileSystem OLE, чтобы получить временную папку Windows.

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
...