3
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

4 回答 4

2

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

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

于 2011-01-13T18:52:54.417 回答
1

tempdb数据库使用的文件的位置可以通过运行快速找到

execute tempdb.dbo.sp_helpfile

(编辑)

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

于 2011-01-13T18:47:54.230 回答
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-未指定的错误.aspx

于 2013-11-27T11:49:58.163 回答
0

您可以使用Scripting.FileSystemOLE 对象来获取 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
于 2018-04-11T16:20:31.850 回答