如何获得在T SQL中的相对路径? 举个例子.sql文件位于该文件夹d:\ TEMP,我想在文件夹d文件hello.txt的路径:\ TEMP \ App_Data文件。 如何使用相对路径的参考?
比方说,我在执行SQL Server Management Studio中内SQL文件。
如何获得在T SQL中的相对路径? 举个例子.sql文件位于该文件夹d:\ TEMP,我想在文件夹d文件hello.txt的路径:\ TEMP \ App_Data文件。 如何使用相对路径的参考?
比方说,我在执行SQL Server Management Studio中内SQL文件。
服务器执行T-SQL。 它不知道客户端从加载的文件。 你必须有嵌入式脚本中的路径。
DECLARE @RelDir varchar(1000)
SET @RelDir = 'D:\temp\'
...
也许你可以通过编程将路径转化为SET命令的.sql脚本文件中,或者你可以使用SQLCMD并通过相对目录中为一个变量。
我有一个类似的问题,并与%CD%伪变量结合使用SQLCMD变量解决了这个问题。 采取了一些试验和错误的所有作品结合起来。 但最终得到了这一切的工作。 这个例子预计script.sql
文件在同一目录中runscript.bat
。
runscript.bat
sqlcmd -S .\SQLINSTANCE -v FullScriptDir="%CD%" -i script.sql -b
script.sql
BULK INSERT [dbo].[ValuesFromCSV]
FROM '$(FullScriptDir)\values.csv'
with
(
fieldterminator = ',',
rowterminator = '\n'
)
go
该.sql文件只是....一个文件。 它没有自己的位置的任何意义。 这是excutes这将有它的位置,该文件的位置感的东西(你没有具体说明)。
我注意到你提到的App_Data文件夹,所以我想这是ASP.NET参与。 如果你想在你的Web应用程序使用相对路径,看到的MapPath
http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath.aspx
当T-SQL正在执行,则在服务器上的一个批处理运行,不运行管理Studio客户机(或任何其他SQL客户端)上。 客户只需将要执行的.sql文件到服务器的文本内容。 所以,除非该文件位于数据库服务器上,我很怀疑你将能够从一个SQL脚本,与它进行交互。
在T-SQL脚本首先通过QueryAnalyzer,SSMS预处理或SQLCMD在客户端。 这些程序都知道文件localcation,并可以很容易地处理类似Oeacle sqlplus的相对pathes。
显然,这只是微软的设计决策,我敢说一个相当愚蠢的。
我试图从mateuscb的评论方法。 我发现它不能正常工作,我不知道为什么,后来我经过多次测试管理。 它可以与下面的脚本工作:
runscript.bat
@set FullScriptDir=%CD%
sqlcmd -S .\SQLINSTANCE -i script.sql
script.sql
BULK INSERT [dbo].[ValuesFromCSV]
FROM '$(FullScriptDir)\values.csv'
with
(
fieldterminator = ',',
rowterminator = '\n'
)
go
只为您的信息作进一步讨论。
以及它不是一个微软的东西首先...这是一个行业标准的事情。 第二你运行T-SQL使用相对路径解决方案是使用一个批处理脚本或东西注入你的路径语句IE:
@echo OFF
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t-SQL.SQL"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
set RunLocation=%~dp0
echo(%~dp0!var! > newsql.sql
ENDLOCAL
)
sqlcmd newsql.sql
或类似的东西反正