更新
根据您的补充和您可能的保护要求
,
可以在csv内容的每个字段中使用,我建议在代理作业期间运行下面的PowerShell脚本,以生成一个没有标头的新csv文件,其中包含您当前的分隔符(
,
)已更改为另一个(
|
在我的情况下),这不会与字段中的数据冲突;它还将把导入的True/False字段更改为1/0。
样品台
CREATE TABLE [dbo].[SampleTable] (
[IsTrueFalse] BIT NOT NULL,
[Number] NVARCHAR(50) NOT NULL,
[Remark] NVARCHAR(50) NOT NULL
);
sample.csv
IsTrueFalse,Number,Remark
"True", "123,234325", "abc"
"False", "456,567890", "efg"
noheaders.cv
1| 123,234325| abc
0| 456,567890| efg
发布管道中使用的PowerShell脚本
# Define file paths
$inputFile = "$(System.DefaultWorkingDirectory)\_azuresql\sample.csv"
$outputFile = "$(System.DefaultWorkingDirectory)\_azuresql\noheaders.csv"
# Read the input file content
$content = Get-Content $inputFile
# Process each line: replace `",` with `|`, remove quotes, and convert "True"/"False" to 1/0
$content | Select-Object -Skip 1 | ForEach-Object {
# Replace `",` with `|` and then remove all remaining quotes
$line = $_ -replace '",', '|' -replace '"', ''
# Convert "True"/"False" to 1/0 for the IsTrueFalse column
$fields = $line -split '\|'
$fields[0] = if ($fields[0] -eq 'True') { '1' } elseif ($fields[0] -eq 'False') { '0' } else { $fields[0] }
$fields -join '|'
} | Set-Content $outputFile
echo "Checking the contents of $outputFile..."
Get-Content $outputFile
echo "Checking bcp version..."
bcp -v
echo "Running bcp command..."
bcp SampleTable in "$outputFile" -S $(AzureSQLServer) -d $(AzureSQLDB) -U $(AzureSQLServerAdmin) -P $(AzureSQLServerAdminPWD) -q -c -t "|" # Pipe delimiter
从表达式
FIRSTROW = 2
在您的SQL脚本中,我可以看到您的csv文件应该有第一行标题。为此,您可以在管道代理作业期间删除第一行并将预期内容输出到新文件中。以下是更新的PowerShell脚本供您参考。
# Define file paths
$inputFile = "$(System.DefaultWorkingDirectory)\_azuresql\test.csv"
$outputFile = "$(System.DefaultWorkingDirectory)\_azuresql\noheaders.csv"
# Read the input CSV file, skip the first line (header), and write the result to the output file
Get-Content $inputFile | Select-Object -Skip 1 | Set-Content $outputFile
echo "Checking bcp version..."
bcp -v
echo "Running bcp command..."
bcp Users in "$outputFile" -S $(AzureSQLServer) -d $(AzureSQLDB) -U $(AzureSQLServerAdmin) -P $(AzureSQLServerAdminPWD) -q -c -t ","
根据您的描述,您似乎需要在SQL上运行SQL脚本,而不是在管道代理计算机上运行,如本文所述
thread
.
根据这份关于如何
Load data from CSV file into a database (bcp) - Azure SQL | Microsoft Learn
,我们可以使用BCP工具将csv内容导入Azure SQL DB表。
按照这个方向,我使用在
windows-latest
Microsoft托管了代理,并设法导入了csv文件的内容。
-
我创建了一个表
Users
在Azure SQL数据库中进行测试;
-
添加了a
test.csv
在我的仓库中创建一个文件,内容如下;
-
在发布管道中,将仓库添加为工件并运行PowerShell脚本;
echo "Checking bcp version..."
bcp -v
echo "Running bcp command..."
bcp Users in "$(System.DefaultWorkingDirectory)/_azuresql/test.csv" -S
$(AzureSQLServer) -d $(AzureSQLDB) -U $(AzureSQLServerAdmin) -P
$(AzureSQLServerAdminPWD) -q -c -t ","
-
发布成功后,我们可以检查表中的更新;