我有以下SQL命令讀取我的數據庫的索引碎片稱爲Logik
:爲什麼在SQL Server Management Studio,但不能從PowerShell的
USE Logik
SELECT
OBJECT_NAME(ind.OBJECT_ID) AS TableName,
ind.name AS IndexName, indexstats.index_type_desc AS IndexType,
indexstats.avg_fragmentation_in_percent
FROM
sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN
sys.indexes ind ON ind.object_id = indexstats.object_id
AND ind.index_id = indexstats.index_id
WHERE
indexstats.avg_fragmentation_in_percent > 0
在SQL Server Management Studio中,這個工程沒有一個問題,並返回與他們的fragementation表。
昨天,這也從PowerShell工作。我沒有改變任何代碼,但今天它不再工作。有沒有人有一個想法,爲什麼?
$Data
會留下空:
param(
[string]$connectionstring = "Server=some\instance;uid=sa;pwd=dfdfdfdf;Database=Logik;Integrated Security=False;MultipleActiveResultSets=True;Connection Timeout=900;"
)
# Stop bei Fehler
$ErrorActionPreference = "SilentlyContinue"
$database = "logik"
# Database Connection herstellen
$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString = $connectionstring
Try { $con.Open() }
Catch { Throw $_.Exception.Message }
# command einlesen um Fragmentation zu lesen
$command = "
USE Logik
SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName,
ind.name AS IndexName, indexstats.index_type_desc AS IndexType,
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind
ON ind.object_id = indexstats.object_id
AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 0"
# Command Zusammensetzen
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.CommandText = $command
$cmd.Connection = $con
$cmd.CommandTimeout = 2000
# Execute Command
Try { $result = $cmd.ExecuteReader() }
Catch { Throw $_.Exception.Message }
# Output von Resultat
$Data = New-Object System.Data.DataTable
$Data.load($result)
整個事情很奇怪,因爲,我加載數據後,我把它放到另一個變量$tables
,我想拋出時$tables
是空的。
我使用此代碼來檢查是否有任何數據加載,並且它返回空行$tables
,但$tables.count
返回8.這怎麼可能?
# Logik Tabellen
$tables = $Data | ? { $_.avg_fragmentation_in_percent -ge 5 -and $_.IndexName -ne 0 }
if (!$tables) { Throw "Keine Datenbank gefunden, oder keine Höher als 5% Fragmentation" }
$tables.count ; $tables ; pause
使用應遵循GO - 確乎上下文切換; – revoua
@revoua no。 USE是僅由SSMS和sqlcmd理解的*批處理*命令。這不是一個T-SQL命令 –
@SimonS不應該使用@SimonS。首先連接到你想要的數據庫。 'USE'是SSMS或sqlcmd可以理解的批處理命令,它不是T-SQL命令。 –