SQL ExecuteReader 抛出“GO 附近的语法不正确”

Sim*_*onS 3 sql-server powershell

我使用我在这里找到的 T-SQL 命令来获取我的数据库表的碎片。当我在 Management Studio 中执行 T-SQL 时,一切正常。如果我在 PowerShell 中使用它,我会收到以下错误(从德语翻译):

使用 0 个参数调用“ExecuteReader”时出现异常: 
“'GO' 附近的语法不正确。
'GO' 附近的语法不正确。”
在 Zeile:17 Zeichen:6
+ $Result = $cmd.ExecuteReader()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullQualifiedErrorId : SqlException

这是我的脚本中引发错误的部分

foreach ($table in $tables)
{
     $Data = New-Object System.Data.DataTable
     $cmd = New-Object System.Data.SqlClient.SqlCommand
     $getFragRate = "
     -- SQL Command von Microsoft um die Index Fragmentation zu überprüfen 
     USE Logik;  
     GO  
     SELECT a.index_id, name, avg_fragmentation_in_percent  
     FROM sys.dm_db_index_physical_stats (DB_ID(N'Logik'), OBJECT_ID(N'$($table)'), NULL, NULL, NULL) AS a  
         JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id;   
     GO  
     "
     $cmd.CommandText = $getFragRate 
     $cmd.Connection = $con
     $Result = $cmd.ExecuteReader()
     $Data.Load($Result)
     $Data
}
Run Code Online (Sandbox Code Playgroud)

为什么会出现这个错误?

我用来执行此操作的用户具有sysadmin,db_ddladmindb_owner权限。

编辑:另一个 T-SQL 命令可以让我的数据库的所有表正常工作,PowerShell 没有问题。

mar*_*c_s 5

GO不是一个T-SQL命令-所以你不能把它从PowerShell中执行T-SQL语句。

GO 是 SQL Server Management Studio 使用的批处理分隔符。

您需要自己将该语句分解为几个单独的语句,并逐一执行。