2016-04-01 14 views
1

A numaralı sunucudan SQL örneklerinin bir listesini çeken ve sonra döndürülen listeden döngüler uygulayan bir proje üzerinde çalışıyorum ve sonunda bir sorgunun çalıştırılması (sonuç olarak kullanıcıları denetleme ve sonuçların içine ekleme tablo) ancak bir hata alıyorum instance not found. Görünüşe göre ben değişkene döngü içinde doğru bir şekilde tanımlama yapıyorum çünkü örnek ismini kodlarsam çalışır.Değişken SQL örneği adını Invoke-SQLcmd'ye geçirme hatası

Bunun nasıl düzeltileceğine dair herhangi bir giriş için teşekkür ederiz.

$Serverlist = invoke-sqlcmd -ServerInstance TESTSERVER1 -Database TESTDB -Query "SELECT instancename from testtable" 

foreach ($SQLInst in $Serverlist) 
{ 
$Inst = $SQLInst.INSTANCE 
Invoke-Sqlcmd -ServerInstance ${$Inst} -Database Master -Query "select @@servername as servername" | select -ExpandProperty servername 
} #end foreach loop 

Invoke-Sqlcmd : A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) At line:12 char:1 + Invoke-Sqlcmd -ServerInstance ${$SQLInst} -Database Master -Query "select @@serv ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

cevap

0

bu durumda o ${$Inst} gibi küme parantezi kullanmak için hiçbir neden yoktur.

$Inst ürününü düzgün kullanacağız. Kıvırcık parantezleri kullanırsanız, o zaman içinde $'u kullanmazsınız: ${Inst}.

Invoke-Sqlcmd -ServerInstance $Inst 

# or 

Invoke-Sqlcmd -ServerInstance ${Inst} 
+0

Ben iki varyasyonunu kullanmayı denedim ve hala hata alıyorum ettik: Çağır-sqlCmd: SQL Server bağlantı kurulurken ağ ilgili veya örneği özgü bir hata oluştu. En büyük sorgunun döndürdüğü örnek adını kodlarsam çalışır. –

+0

'$ Inst' değişkeninin yaptığınız değeri içerdiğinden emin misiniz? Bir 'Write-Verbose -Message '~ $ Inst ~" -Verbose' ekleyin ve ne yazdığını görün ya da daha iyisi kodda hata ayıklayın ve değişkenleri denetleyebilmeniz için bir kesme noktası ekleyin. – briantist

+0

Açıklama ile herhangi bir çıktı almıyorum ama eğer Write-Output $ SQLInst eklerseniz bir değer elde ederim. Örnekleme adı olarak $ Inst'ı doğru olarak nitelendiriyor muyum? –

0

ben her örneği doğru biri olduğundan emin olmak için kontrol ediyorum:

$Serverlist = invoke-sqlcmd -ServerInstance TESTSERVER1 -Database TESTDB -Query "SELECT instancename from testtable" 

    foreach ($SQLInst in $Serverlist) 
    { 
     $Inst = $SQLInst.INSTANCE 
     Write-Host $Inst 
    } #end foreach loop 

benim önceki deyimi ile bazı sorunlar fark ettim. Bunu deneyebilir misin?

$Serverlist = invoke-sqlcmd -ServerInstance TESTSERVER1 -Database TESTDB -Query "SELECT instancename from testtable" 

foreach ($SQLInst in $Serverlist) 
{ 
    $Inst = $SQLInst.instancename 
Invoke-Sqlcmd -ServerInstance "$Inst" -Database Master -Query "select @@servername as servername" | select -ExpandProperty servername 
} #end foreach loop 
+0

Bu değişikliği yaptığımda bir hata alıyorum: Invoke-Sqlcmd: Değer boş olamaz. Parametre adı: ServerInstance satır: 16 karakter: 1 + Çağır-sqlCmd -ServerInstance $ SQLInst -Database Usta -Sorgu "@@ seçmek Servern ... + ~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~ + CategoryInfo: InvalidArgument: (:) [Invoke-Sqlcmd], ArgumentNullException + FullyQualifiedErrorId: CannotGetServerInstance, Microsoft.SqlServer.Management.PowerShell.GetScriptCommand –

+0

Denetle $ Serverlist dizisi doldurulursa, değerleri kabuk olarak yapabilirsin: Write-Host $ Serverlist –

+0

Bunu ekledim ve "System.Data.DataRow" çıktısını alıyorum ve şu anda test için yalnızca bir değer döndürüyor. –