【问题标题】:Execute SQL script in an Azure SQL Data Warehouse在 Azure SQL 数据仓库中执行 SQL 脚本
【发布时间】:2018-11-20 17:53:41
【问题描述】:

我基本上是在尝试执行一个 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 Server 数据仓库中运行它似乎可以正常工作,但是从 Powershell 运行它时会抱怨语法错误。

我没有考虑任何我必须添加/修改的 SQL 语法?

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

谢谢!

【问题讨论】:

  • 删除GO并替换为;
  • 我也试过了,还是不行
  • 你能发布你的 Powershell 脚本吗?
  • 我已经发布了 PowerShell 脚本。谢谢! @马特

标签: sql-server azure powershell data-warehouse


【解决方案1】:

错误与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

测试结果:

【讨论】:

  • 完美!谢谢!
猜你喜欢
  • 2016-06-30
  • 1970-01-01
  • 2016-02-06
  • 2016-10-26
  • 2023-03-10
  • 1970-01-01
  • 2017-06-28
  • 2016-08-29
  • 1970-01-01
相关资源
最近更新 更多