2010-11-23 18 views
0

Alors .... J'ai une requête SQL (MSSQL 2005) qui rassemble certaines données que je dois représenter ou envoyer ailleurs. Dans ce cas particulier, j'ai besoin de créer un CSV à partir de la requête, ce qui dans PowerShell est assez simple.SQL Sélectionnez l'aide de requête à PowerShell

CEPENDANT mon problème est ceci. Comment exécuter ma requête (de préférence sur un système distant/le serveur SQL)? Comment transmettre les paramètres requis de la requête? (voir PARAM1, PARAM2, PARAM3)?

Points bonus ... PARAM1 doit être une date, le format aaaa-mm-jj fonctionne. PARAM2 doit être l'une des trois options suivantes: OPT1, OPT2, OPT3 PARAM3 doit être une chaîne de X nombre de caractères.

PS Oui, en utilisant osql.exe est venu à moi, mais comme je l'ai scripté en batch, il m'est apparu que ... eh bien je ne veux plus utiliser batch. ;-)

Select COL1, COL2 FROM [database].[dbo].[function](PARAM1,PARAM2,PARAM3); 

Répondre

2

C'est assez facile avec le SQL cmdlets in 2.0:

$Query = "Select COL1, COL2 FROM [database].[dbo].[function](PARAM1,PARAM2,PARAM3)" 
$Results = Invoke-SQLCmd -ServerInstance <server> -Database <DB> -Query $Query 

Ensuite, vous pouvez utiliser les noms de colonnes dans votre $Results, à savoir:

$Col1 = $Results.COL1

Vous pouvez analyser votre $Query pour vos autres paramètres, par exemple:

$Query = "Select COL1, COL2 FROM [database].[dbo].[function](" + $Param1 + "," + $Param2 + "," + $Param3 + ")"

EDIT:

Pour activer les snapins, utilisez:

Add-PSSnapin SqlServerProviderSnapin 
Add-PSSnapin SqlServerCmdletSnapin 
+0

temps OK Noob. J'ai passé la dernière demi-heure à chercher où télécharger/ajouter Invoke-SQL. (J'ai aussi fait ça l'autre nuit et je n'ai pas réussi à le trouver). Je pensais bêtement dans les "Extensions Microsoft Windows PowerShell pour SQL Server" de la page SQL Feature Pack. Mais après l'avoir installé, je n'étais pas plus proche. LOL –

+0

Vous devez installer les paquets. Je vais ajouter une note pour cela dans la réponse. – JNK

+0

Oh tu sais que j'ai essayé ça. Nada .. :) Je vais peut-être redémarrer, peut-être que c'est nécessaire et j'ai raté ça. –