在 Azure SQL 数据仓库中执行 SQL 脚本
Execute SQL script in an Azure SQL Data Warehouse
我基本上是在尝试执行一个 SQL 脚本,该脚本使用 Powershell 脚本将大约 50 个视图插入到 Azure 数据仓库中。但出于某种原因不喜欢我正在使用的语法。
例如:
CREATE VIEW XX.FirstView
AS
SELECT bookings.Activity
FROM XX.FirstTable bookings
GO
CREATE VIEW XX.SecondView
AS
SELECT books.ID
FROM XX.SecondTable books
如果我 运行 它直接在 SQL 服务器数据仓库中似乎工作正常,但是当 运行 从 Powershell 中连接它时,它会抱怨语法错误。
有任何 SQL 语法我必须 add/modify 而我没有考虑吗?
Syntax Error
PowerShell 脚本:
function Invoke-SQLDestination {
param([string] $sqlCommand = "")
$sqlCommand.ToString()
$connectionStringDestination = "XXXXXXXX"
$connection = new-object system.data.SqlClient.SQLConnection($connectionStringDestination)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet)
$connection.Close()
$dataSet.Tables
}
$sqlscript = Get-Content ./SqlViewCreate.sql | Out-String
Invoke-SQLDestination $sqlscript
谢谢!
错误与sql脚本中的"go"有关,您使用的powershell脚本无法识别。
你可以对你的 powershell 做一点改动,当它显示 "go" 时,执行上面的 sql 脚本。
代码如下:
function Invoke-SQLDestination {
param([string] $sqlCommand = "")
#$sqlCommand.ToString()
$commandTxt = @(Get-Content -Path $sqlCommand)
foreach($txt in $commandTxt)
{
if($txt -ne "Go")
{
$SQLPacket += $txt +"`n"
}
else
{
$connectionStringDestination = "xxxx"
Write-Host $SQLPacket
$connection = new-object system.data.SqlClient.SQLConnection($connectionStringDestination)
$command = new-object system.data.sqlclient.sqlcommand($SQLPacket,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet)
$connection.Close()
$dataSet.Tables
$SQLPacket =""
}
}
}
# here pass the sql file path
$sqlscript = "D:\azure sql\test.sql"
Invoke-SQLDestination $sqlscript
以下是我的sql文件:
create view v1
as
select name from student
go
create view v2
as
select name from student
go
create view v3
as
select name from student
go
测试结果:
我基本上是在尝试执行一个 SQL 脚本,该脚本使用 Powershell 脚本将大约 50 个视图插入到 Azure 数据仓库中。但出于某种原因不喜欢我正在使用的语法。
例如:
CREATE VIEW XX.FirstView
AS
SELECT bookings.Activity
FROM XX.FirstTable bookings
GO
CREATE VIEW XX.SecondView
AS
SELECT books.ID
FROM XX.SecondTable books
如果我 运行 它直接在 SQL 服务器数据仓库中似乎工作正常,但是当 运行 从 Powershell 中连接它时,它会抱怨语法错误。
有任何 SQL 语法我必须 add/modify 而我没有考虑吗?
Syntax Error
PowerShell 脚本:
function Invoke-SQLDestination {
param([string] $sqlCommand = "")
$sqlCommand.ToString()
$connectionStringDestination = "XXXXXXXX"
$connection = new-object system.data.SqlClient.SQLConnection($connectionStringDestination)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet)
$connection.Close()
$dataSet.Tables
}
$sqlscript = Get-Content ./SqlViewCreate.sql | Out-String
Invoke-SQLDestination $sqlscript
谢谢!
错误与sql脚本中的"go"有关,您使用的powershell脚本无法识别。
你可以对你的 powershell 做一点改动,当它显示 "go" 时,执行上面的 sql 脚本。
代码如下:
function Invoke-SQLDestination {
param([string] $sqlCommand = "")
#$sqlCommand.ToString()
$commandTxt = @(Get-Content -Path $sqlCommand)
foreach($txt in $commandTxt)
{
if($txt -ne "Go")
{
$SQLPacket += $txt +"`n"
}
else
{
$connectionStringDestination = "xxxx"
Write-Host $SQLPacket
$connection = new-object system.data.SqlClient.SQLConnection($connectionStringDestination)
$command = new-object system.data.sqlclient.sqlcommand($SQLPacket,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet)
$connection.Close()
$dataSet.Tables
$SQLPacket =""
}
}
}
# here pass the sql file path
$sqlscript = "D:\azure sql\test.sql"
Invoke-SQLDestination $sqlscript
以下是我的sql文件:
create view v1
as
select name from student
go
create view v2
as
select name from student
go
create view v3
as
select name from student
go
测试结果: