SQL Server Temp Dir?

时间:2011-01-13 18:36:56

标签: sql-server temp

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 个答案:

答案 0 :(得分:2)

您必须使用xp_cmdshell或某些CLR(不确定权限)来读取环境变量%TEMP%%TMP%。这会为您提供服务帐户文件夹。 “常见”的是%WINIR%\Temp

这不是您在日常SQL中通常会做的事情

答案 1 :(得分:1)

运行

可以快速找到tempdb数据库使用的文件的位置
execute tempdb.dbo.sp_helpfile

(编辑)

......那不是你想要的,是吗?除非潜入sp_OA程序,我认为没有任何简单的方法可以访问这种性质的操作系统信息。

答案 2 :(得分:1)

答案 3 :(得分:0)

您可以使用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