Ich habe mehrere Tabellen mit derselben Struktur, die jeweils einen anderen Kunden repräsentieren. In jeder dieser Tabellen gibt es mehrere Spalten mit verschiedenen Strings von Daten, bei denen die Werte durch ein Leerzeichen getrennt sind, etwa so:So analysieren Sie Werte aus einer SQL-Spalte in einer Schleife mit einer gespeicherten Prozedur
Domain_Name | Account_ID | SiteID | Account_Name | BotExceptions | BlockCountries | BlockedURLs |BlockedIPs
www.Domain1.com | 123456 |987654 | account1 | TR Sites24x7 Tools/ | UK FR IR| www.url1.com/someRsc www.url2.com/someRsc|46.218.22.145 64.129.104.70 92.44.168.111
www.Domain2.com | 345678|321098| account2 | TR Sites24x7 Tools/ | ES GR AX BE| www.url1.com/someRsc www.url2.com/someRsc|46.218.22.145 64.129.104.70 92.44.168.111
So in jeder Spalte alle Elemente (IPs/Bot Namen/Länder/URLs) werden zu einer einzelnen Zeichenfolge verkettet, die durch einen einzelnen Leerraum begrenzt ist. Zum Beispiel "TR Sites24x7 Tools /" ist eigentlich "TR", "Sites24x7" und "Tools /". Ich bin auf der Suche nach einem Weg, um eine gespeicherte Prozedur erstellen und mithilfe von SQL/Tsql, die Zeichenfolge in jeder Spalte analysieren und die Elemente in Zeilen ähnlich dem Platz:
Domain_Name | Account_ID | SiteID | Account_Name | BotExceptions | BlockCountries | BlockedURLs |BlockedIPs
www.Domain1.com| 123456 | 987654 | account1 | TR | UK | www.url1.com/someRsc | 46.218.22.145
www.Domain1.com| 123456 | 987654 | account1 | Sites24x7 | FR | www.url2.com/someRsc | 64.129.104.70
Mit anderen Worten stellen die einzelnen Werte in einer Reihe für sich, während die ersten 4 Spalten in der gesamten Tabelle statisch bleiben. Da die Daten bereits in Tabellen in der SQL Server 2012 DB enthalten sind, dachte ich mir, dass es einfacher wäre, einen SP oder eine Funktion zu haben, die dieses Parsen durchführen würde, aber ich bin mit dieser Sprache nicht sehr vertraut und könnte etwas Hilfe gebrauchen. Vielen Dank.
Dies ist ein schreckliches Design. Erstens, ** Niemals ** halte mehrere Werte in einer einzelnen Spalte, und zweitens, Es gibt fast nie eine Rechtfertigung, mehrere Tabellen mit derselben Struktur und derselben Bedeutung zu behalten. Ihr Zieldesign ist auch nicht gut. Der richtige Entwurf wäre das Hinzufügen einer Tabelle für jede Spalte, in der Sie derzeit mehrere Werte haben, die einen Schlüssel für die Ersetzung der primären Tabelle und einen einzelnen Wert enthalten. Vereinheitlichen Sie auch die verschiedenen Kunden-Tabellen in einer einzigen Tabelle. –
Ich stimme @ZoharPeled zu, aber ich hoffe, dass ein Teil des Grundes, dass Sie das fragen, ist, weil Sie versuchen, die Daten ein wenig zu normalisieren. Es ist wirklich ziemlich schrecklich ... – 3BK
Ich stimme zu, dass das ursprüngliche Tischdesign weniger als optimal ist. Es ist das Ergebnis eines externen Skripts, das ich nicht kontrollieren kann, daher sind diese Rohdaten standardmäßig in der Struktur, die ich oben gezeigt habe. Es kann sich lohnen, mein Zieldesign nach dem Parsen in mehrere Tabellen zu ändern, jede für eine der Spalten in den ursprünglichen Tabellen. – ArielH