我们在SQL Server项目中有一个部署后脚本,它本质上是在创建表之后执行bulk-insert来填充表。这是通过读取几个.csv文件来完成的:
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很难找到这些文件:
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 )可以告诉我文件的当前路径?
发布于 2015-01-16 22:51:14
您遇到的问题是.csv文件在您的VS项目中,但是脚本将在SQL Server上执行,因此这些文件应该位于服务器可以访问的位置。也许,您可以添加一个预编译事件,将.csv文件复制到服务器上的共享驱动器,然后在脚本中使用从共享位置获取文件的静态路径。
发布于 2020-02-20 08:22:10
我知道这个问题很古老,但仍然是相关的。我在以下情况下找到了这个问题的有效解决方案(这些是可选的,因为有方法可以克服它):
以下是步骤:
打开
BULK INSERT
[dbo].[Table1]
FROM '$(CurrentPath)\PathToFolderInsideOutputDirectory\Data1.csv'
WITH
(
ROWTERMINATOR = '0x0a',
FIELDTERMINATOR = ','
)使用compile.
发布于 2014-05-29 07:34:05
您可以创建一个SSIS包,并使用foreach Loop container遍历给定路径中的所有.csv文件。请参阅下面的Foreach Loop Container演示配置

https://stackoverflow.com/questions/23923366
复制相似问题