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_ddladmin和db_owner权限。
编辑:另一个 T-SQL 命令可以让我的数据库的所有表正常工作,PowerShell 没有问题。
GO是不是一个T-SQL命令-所以你不能把它从PowerShell中执行T-SQL语句。
GO 是 SQL Server Management Studio 使用的批处理分隔符。
您需要自己将该语句分解为几个单独的语句,并逐一执行。
| 归档时间: |
|
| 查看次数: |
989 次 |
| 最近记录: |