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

时间:2017-01-23 19:30:58

标签: sql-server powershell

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

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

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
}

这就是错误(翻译自德语):

  

使用0 Argument(s)调用“ExecuteReader”时发生异常:   “'GO'附近的语法不正确。       'GO'附近的语法不正确。“       在Zeile:17 Zeichen:6       + $ Result = $ cmd.ExecuteReader()       + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~           + CategoryInfo:NotSpecified:(:) [],MethodInvocationException           + FullyQualifiedErrorId:SqlException

为什么会出现此错误?

我用来执行此操作的用户具有sysadmindb_ddladmindb_owner权限。

编辑:另一个T-SQL命令,用于使我的数据库的所有表在PowerShell

中无问题地运行

1 个答案:

答案 0 :(得分:4)

GO NOT 是一个T-SQL命令 - 因此您无法在从PowerShell执行的T-SQL语句中使用它。

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

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