SSIS: Update variable

Wenn man in einem Sql Server Integration Services Paket eine Variable einsetzt, dann hat man mehrere Möglichkeiten den Wert dieser Variable zu setzen.

Zu aller erst natürlich indem man in den SQL Server Data Tool einfach einen Wert (via Expression) vergibt. Des weiteren kann man den Wert natürlich z.B. aus einer Tabelle, aus einem Textfile usw. auslesen. Hier ein paar Links, die mir hilfreich dabei waren:

Soweit ich gesehen habe, kann man auch mit einer Expression Daten aus einer Tabelle auslesen. Da ich dazu aber nur wenig Info im Internet gefunden habe (ich habe aber auch nicht danach gesucht *ggg*) sei das nur am Rande erwähnt!

Die letzten drei Links dienen mir dazu, den zugewiesenen Wert im „Output“ Fenster des debug-Modus anzeigen zu lassen!

SQL-Server 2016 Reporting Services: Branding

Wer Sharepoint (ab 2013) im Einsatz hat und dann das UI des SQL-Server 2016 Reporting Services (kurz: SSRS) sieht, dem wird eine gewisse Ähnlichkeit auffallen 😉

Nun wollte ich bei uns das SSRS optisch an unser Intranet anpassen.Hier die Links, mit denen ich das gelöst habe:

  1. https://www.mssqltips.com/sqlservertip/4567/sql-server-2016-reporting-services-custom-branding-example/
  2. http://www.victorrocca.com/report-server-2016-custom-branding/
  3. https://craigporteous.com/2016/05/ssrs-2016-brand-package-breakdown/
  4. https://www.qumio.com/Blog/Lists/Posts/Post.aspx?ID=39
  5. https://archive.codeplex.com/?p=ssrsbrandingfileeditor
  6. https://blogs.msdn.microsoft.com/sqlrsteamblog/2016/03/20/how-to-create-a-custom-brand-package-for-reporting-services-with-sql-server-2016/

Hier noch ein Hinweis:
Sollte man mit dem neu hochgeladenen Branding nicht zufrieden sein, kann man das Branding einfach wieder entfernen (gleich neben dem NAmen des aktuell verwendeten Brandings sind die Buttons!). Weil ich das übersehen hatte habe ich recht lange nach dem Link Nr. 6 gesucht! Dort sind ganz oben die originalen Branding-Files verlinkt!

Debian 9: Access to MS-SQL Server

Damit man von einem Debian-System, unter Verwendung von PHP7.0, auf einen Microsoft SQL-Server ( > SQL Server 2008!!) zugreifen kann sollte man diese beiden Anleitungen beachten:

Ganz am Schluss dann noch diesen Befehl und dann den Apache neustarten:

pecl install sqlsrv-5.2.0RC1

und schon sollte das funktionieren!!

Wichtiger Hinweis noch: Fall Ihr auf eine Datenbank in einer benannten Instanz zugreifen wollt müsst ihr den Server-Namen wie folgt zusammenstellen:

server.domain.tld\INSTANCENAME,1111

Wobei Ihr hier anstelle der „1111“ den richtigen Port der Instanz angeben müsst!!

 

 

SQL-Server: Performance-counters

Im Zuge der Spectre und Meltdown-Patch-Orgie stellte sich ja heraus, dass diese die Perfomance der Hardware belasten. Überall waren Zahlen zu den Leistungseinbußen zu lesen/hören im Bereich von 10-20%.

In einem Artikel fand ich dazu eine kurze Liste Windows-Performance-Counters, mit denen man da messen kann bzw. die Auslastung der Server im Auge behalten kann:

  • Processor(_Total)\% Processor Time
  • System\Processor Queue Length
  • PhysicalDisk(_Total)\Avg. Disk sec/Read
  • PhysicalDisk(_Total)\Avg. Disk sec/Write
  • SQLServer:Buffer Manager\Page life expectancy
  • SQLServer:SQL Statistics\Batch Requests/sec
  • SQLServer:SQL Statistics\SQL Compilations/sec
  • SQLServer:SQL Statistics\SQL Re-Compilations/sec

Wobei hier (wie für alle Messungen) gilt:
Wenn man die Bezugsgrößen nicht kennt, dann helfen die schönsten Auswertungen nichts!

Sprich: Wer die Auslastung seiner Rechner VOR der Änderung nicht kennt, kann auch keine Aussagen über die Änderungen treffen 😉

Source:

https://redmondmag.com/articles/2018/01/30/spectre-meltdown-sql-server-impact.aspx

SQL: Version numbers

Hier ein paar Links zu den „Übersetzungen“ der Versions-Nummern der MS-SQL-Server-Instanzen. Warum mehrere Links? Weil die ersten Seiten nicht komplett waren und ich erst ganz am Ende (als ich die Tab’s schon wieder geschlossen habe) bemerkt hatte, dass diese Seite (letzter Link) doch komplett ist  😉

https://buildnumbers.wordpress.com/sqlserver/
http://sqlserver-kit.org/en/home/version#microsoft-sql-server-2016-builds
http://sqlserverversions.000webhostapp.com/

 

SQL-Server: Use bcp to export table

Warum dieser Beitrag? Weil es bei der Verwendung von „bcp“ und einem CMD-Script ein paar Fallstricke gibt, über die ich ALLE heute gestolpert bin 😉

Ich fand dieses Beispiel:
https://stackoverflow.com/questions/23852295/export-sql-table-data-with-column-names-to-csv-file

@echo off
bcp "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table_name>'" queryout c:\file.csv -c -r, -T -S <server_name> -d <database_name>
bcp "select * from <table_name>" queryout c:\data.csv -c -t, -T -S <server_name> -d <database_name>
echo. >> c:\file.csv
type c:\data.csv >> c:\file.csv
del c:\data.csv

Hauptproblem war, dass wir hier im Deutschen Sprachraum Umlaute haben und bei dieser Version wurden diese komplett „zerstört“.Das Weiteren hatte ich das Problem, dass in meinen zu exportierenden Daten auch „Mehrzeilige Texte“ vorkamen. Spätestens beim Import nach z.B. Excel bekam ich das Problem, dass Excel nicht mehr unterscheiden konnte zwischen einem Zeilenumbrum innerhalb einer Zelle und einem Zeilenumbruch am Ende einer Zeile!

Zudem war es mir nicht variabel genug, da ich diese Funktion in näherer Zukunft für mehere Tabellen würde ausführen müssen.

Daher erstellte ich ein Powershell-Script:

#
# Getting the data from a sql-database
#
# Export the data via bcp and prepare the data
# with a few find-replace actions to a multi-line-string won'
# make problems at importing
#
# I had the best experience using Libre Office Calc for the import!!
#
#

# Var's to be changed:
$tableName = "talbename"
$db = "databasename"
$server = "servername\instancename"

# WHERE-Clause to limit output
$whereClause = ""

# No changes after here
# =============================================================================

# "home"-Folder
$baseFolder = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition

# bcp-Path
$bcpPath = "C:\Program Files\Microsoft SQL Server\110\Tools\Binn\bcp.exe"

# FileNames
$headerFile = "$baseFolder\header.dat"
$dataFile = "$baseFolder\data.dat"
$resultsFile = "$baseFolder\$tableName.csv"

# Get the header
$queryStr = "Select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '$tableName'" 
& $bcpPath "$queryStr" queryout "$baseFolder\header.dat" -w -r`°´ -T -S $server -d $db

# Get the data
$queryStr = "select * from $tableName"
if ($whereClause)
{
    $queryStr = $queryStr + " " + $whereClause
}
& $bcpPath "$queryStr" queryout "$baseFolder\data.dat" -w -t`°´ -r`~´ -T -S $server -d $db

# Write header-data to result file
$contentHeader = (Get-Content $headerFile -Raw)
$cTemp = $contentHeader.Replace('`°´','";"')
'"' + $cTemp + '"' > $resultsFile

#Write data to result file
$contentData = (Get-Content $dataFile -Raw)
$cTemp = $contentData.Replace('`°´','";"')
$cTemp2 = $cTemp.Replace('`~´','"' + "`n" + '"')
'"' + $cTemp2 + '"' >> $resultsFile

Remove-Item $headerFile
Remove-Item $dataFile