首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在部署后SQL文件中指定相对路径

在部署后SQL文件中指定相对路径
EN

Stack Overflow用户
提问于 2014-05-29 07:16:09
回答 3查看 1.2K关注 0票数 3

我们在SQL Server项目中有一个部署后脚本,它本质上是在创建表之后执行bulk-insert来填充表。这是通过读取几个.csv文件来完成的:

代码语言:javascript
复制
BULK INSERT
    [dbo].[Table1]
    FROM '.\SubFolder\TestData\Data1.csv'
    WITH
    (
        ROWTERMINATOR = '0x0a',
        FIELDTERMINATOR = ','
    )

BULK INSERT
    [dbo].[Table2]
    FROM '.\SubFolder\TestData\Data2.csv'
    WITH
    (
        ROWTERMINATOR = '0x0a',
        FIELDTERMINATOR = ','
    )

问题是Visual Studio很难找到这些文件:

代码语言:javascript
复制
Cannot bulk load because the file ".\SubFolder\TestData\Data1.csv" could not be opened. 
Operating system error code 3(The system cannot find the path specified.).

.csv文件签入到源代码管理中,当我转到它们在我机器上映射到的文件夹时,我确实看到了它们。我假设问题是.没有返回正在执行的sql文件的当前路径。有没有办法获得相对路径?有没有宏(或者SQLCMD Variable )可以告诉我文件的当前路径?

EN

回答 3

Stack Overflow用户

发布于 2015-01-16 22:51:14

您遇到的问题是.csv文件在您的VS项目中,但是脚本将在SQL Server上执行,因此这些文件应该位于服务器可以访问的位置。也许,您可以添加一个预编译事件,将.csv文件复制到服务器上的共享驱动器,然后在脚本中使用从共享位置获取文件的静态路径。

票数 1
EN

Stack Overflow用户

发布于 2020-02-20 08:22:10

我知道这个问题很古老,但仍然是相关的。我在以下情况下找到了这个问题的有效解决方案(这些是可选的,因为有方法可以克服它):

  • 您将使用Visual studio集成开发环境中的“发布”选项来部署您的应用程序。
  • csv文件是项目的一部分,并配置为复制到输出文件夹。

以下是步骤:

打开

  1. 项目属性,然后转到SQLCMD Variables部分。
  2. 添加一个新变量(例如$(CurrentPath))
  3. In default Value put:$(ProjectDir)$(OutputPath)
  4. Change
    1. to:
    2. to:

代码语言:javascript
复制
BULK INSERT
    [dbo].[Table1]
    FROM '$(CurrentPath)\PathToFolderInsideOutputDirectory\Data1.csv'
    WITH
    (
        ROWTERMINATOR = '0x0a',
        FIELDTERMINATOR = ','
    )

使用compile.

  • Test保存所有内容并使用
  1. 进行部署,确保$(CurrentPath)变量显示正确的路径(或按下“
  2. values”按钮),然后按publish按钮,即可正常工作。
票数 0
EN

Stack Overflow用户

发布于 2014-05-29 07:34:05

您可以创建一个SSIS包,并使用foreach Loop container遍历给定路径中的所有.csv文件。请参阅下面的Foreach Loop Container演示配置

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23923366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档