Massenimport in MS SQL-Datenbank Skript mit Powershell

Massenimport in MS SQL-Datenbank Skript mit Powershell

Während ich habe getestet Failover-Cluster von Microsoft SQL Server 2012 (mehr Details: Schritt-für-Schritt die Bereitstellung von AlwaysOn auf MS SQL 2012) Ich brauchte Massenimport einiger Daten in die Datenbank zu generieren.

Sobald ich in T-SQL sehr schlecht bin, entschied ich mich für diese Aufgabe Skript auf Powershell zu schreiben.

Wir brauchen:

  • Datenbank selbst
  • Tabelle in sie zu Testzwecken

Sie sollten bereits Datenbank haben. Es ist besser, neue leere Datenbank zu erstellen, jetzt brauchen wir eine Tabelle zu erstellen. Ich habe es manuell in Designer in SQL Server Management Studio.

Massenimport in MS SQL-Datenbank Skript mit Powershell

  • GUID - Schlüsselfeld für die Daten
  • TIMESTAMP - Zeitstempel :)

Hier ist das Skript. Es akzeptiert zwei obligatorischen Parameter: Gesamtarbeitszeit und die Anzahl der INSERT-Abfragen pro Sekunde.

param(	[Parameter(Mandatory=$true)][int] $Duration, 
		[Parameter(Mandatory=$true)][int] $StringsPerSecond
	 );


$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=ae1-tst-listene.domain.local; Initial Catalog=DAD_TST; Integrated Security=SSPI");
$conn.open();
$cmd = $conn.createcommand();

$start_time = Get-Date;
$end_time = $start_time.AddMinutes($Duration);
$current_time = Get-Date;
$counter = 0;

while ($end_time -gt $iteration_end_time) {
	$iteration_start_time = Get-Date;
	$guid = [guid]::NewGuid();
	
	if ($iteration_start_time.DateTime -gt $current_time.DateTime) {
		$counter = 0;
		echo $current_time.DateTime;
	}
	
	if ($counter -lt $StringsPerSecond -and $iteration_end_time.DateTime -eq $iteration_start_time.DateTime) {
		
		if ($conn.State -eq "Closed") {
			echo "Re-Opening Connection !!!";
			try {
				$conn.open();
			} catch {
				echo "Re-connection error !!!";
			}
		}
		$current_time_string = Get-Date -Format "yyyyMMddHHmmss";
		$current_time = Get-Date;
		$cmd.commandtext = "INSERT [dad_tst] (GUID, TIMESTAMP) VALUES ('$($guid)', $current_time_string)";
		try {
			$result = $cmd.executenonquery();
		} catch {
			echo "Error sending a query !!!";
		}
		$counter++;
	}
	
	$iteration_end_time = Get-Date;
}

$conn.close();

Es ist besser, das Skript von Computer ausführen können, die auf dem Server näher ist, als Netzwerk-Latenz stark nach unten Leistung verlangsamen wird.

Als Ergebnis werden Sie so etwas wie dieses:

Massenimport in MS SQL-Datenbank Skript mit Powershell

 

Tags: powershell (de), skript, ms sql server (de)

Drucken