2016-04-22 15 views
0

Good Afternoon All ErstellenDynamische Variablen in SQL Server

Kann jemand raten, wenn ich dynamisch erklären kann und Werte an Variablen in dem unten beschriebenen Szenario zuweisen?

Ich habe eine gespeicherte Prozedur (Sproc) geschrieben, die den Prozentsatz der Mitglieder in Untergruppen einer Organisation berechnet.

Ich weiß, dass es 7 Untergruppen gibt. Ich speichere die Ergebnisse der Prozentberechnung in 7 Variablen, die ich später im Sproc verwende. Jede Variable wird nach dem Namen der Untergruppe benannt.

Natürlich bedeutet dies, wenn sich der Name oder die Anzahl der Untergruppen ändert, muss ich Teile des Sprocs neu schreiben.

Ich glaube, dynamische SQL könnte verwendet werden, um die Sproc auf Änderungen in den Untergruppen anpassen, aber ich bin mir nicht sicher, wie Sie dynamische SQL für dieses Szenario einrichten. Kann jemand ein Beispiel oder eine Anleitung anbieten?

+1

Dynamisches SQL ist normalerweise nicht die Lösung für SQL-Probleme. Wie Cursor, hat es seinen Platz, aber es ist leicht zu vermasseln, schwierig zu pflegen und anfällig für Injektionsangriffe. Erwägen Sie die Verwendung einer temporären Tabelle (oder Tabellenvariablen), die für jede "Variable" eine Zeile enthält, anstatt standardmäßige SQL-Variablen zu verwenden. – StingyJack

Antwort

1

sein Was Sie vorschlagen gegen den Strich geht in Sql Server. Ihre Bedenken, später etwas umschreiben zu müssen, sprechen dafür ... Sie sind also auf dem richtigen Weg, sich Sorgen zu machen.

Im Allgemeinen möchten Sie Ihre Ergebnisse in eine Art von Set-orientierte Sache ... Tabelle-wie ... wo eine Spalte hat den Namen der Untergruppe und die andere Spalte hat den berechneten Wert.

Sie könnten finden table-valued functions besser für Ihr Problem ... aber es ist schwer zu sagen ... wir sind nicht tief auf Details in dieser Frage.

Dynamisches SQL ist fast immer der letzte Ausweg. Es scheint Spaß zu machen, hat aber alle möglichen Probleme ... nicht zuletzt die programmatisch sichere und konsistente Behandlung der Ergebnisse.

0

Sie können diese einfache Abfrage folgen, um zu sehen, wie Sie tun können, dass

declare @sql nvarchar(max) = '' 
declare @outerX int = 0 -- this is your variable you want to set it from dynamic SQL 
declare @i int = 0 -- for loop 

while @i <= 6 
begin 
    set @sql = 'select @x = ' + CAST(@i as varchar) 
    exec sp_executesql @sql, N'@x int OUTPUT', @x = @outerX output 
    set @i = @i + 1 
    print @outerX 
end 

Ausgabe

0 
1 
2 
3 
4 
5 
6 

More Detail Here