Ich habe nach einer Antwort darauf gesucht, aber alles, was ich finden kann, sind Leute, die fragen, wie man alle Spalten ALLER Tabellen in einer Datenbank nach einem Wert durchsuchen soll. Ich möchte nur alle Spalten nach einer bestimmten Tabelle durchsuchen. Der Code, den die Leute für die Frage aller Tabellen entworfen haben, ist kompliziert und schwer für mich herauszufinden, wo genau eine bestimmte Tabelle gesucht wird. Kann mir jemand helfen? Danke
Verwenden Sie einfach ein Drittanbieter-Tool. Es gibt mehrere, die 100% kostenlos sind und Sie können nichts falsch machen, weil sie Ihnen eine Menge Zeit sparen.
ApexSQL-Suche (durchsucht sowohl Schema als auch Daten), SSMS Toolpack (sucht Schema und Daten, aber nicht frei für SQL Server 2012), SQL-Suche (nur Daten durchsuchen).
Ehrlich gesagt, verstehe ich nicht wirklich, warum selbst sehr erfahrene DBAs sich Mühe geben, Skripte dafür zu schreiben, wenn sie ein kostenloses Tool verwenden können, das die Aufgabe erledigt.
Ich habe keine Ahnung von den Spaltentypen oder Datenwerten, nach denen Sie suchen, aber ich schätze, Sie versuchen, nach einem Teilstring unter mehreren Textspalten zu suchen.
Dies ist ein Job für Volltextsuche .
Verschwenden Sie keine Zeit mit LIKE '%' + @SearchStr + '%'
. Sie müssen viel komplizierten Code schreiben, um es zu unterstützen, und diese Lösung wird sowieso nicht gut funktionieren.
In einer ähnlichen Frage < Ich habe SQL Workbench / J erwähnt.
Der Befehl, der die Datenbank durchsucht, kann auch auf nur eine Tabelle beschränkt sein. Auch wenn diese Frage PostgreSQL-spezifisch war, funktioniert das Tool für SQL Server soweit ich weiß.
Hier ist eine Lösung, die, wie der Ansatz von @ Decker97, aus Metadaten ermittelt, welche Spalten für Textsuche geeignet sind. Nimmt 2005+ für die Verwendung von XML PATH sowie sys.columns, sys.tables usw. an. Unterstützt TEXT / NTEXT / CHAR / NCHAR / VARCHAR / NVARCHAR und fügt gegebenenfalls das führende N in die Suchzeichenfolge ein. Unterstützt keine XML-Spalten. Was es etwas anders macht, ist, dass es für jede Tabelle und nicht für jede einzelne Spalte ein einzelnes Resultset zurückgibt, so dass Sie nur eine Zeile pro tatsächlicher Tabellenzeile erhalten, auch wenn mehrere Spalten übereinstimmen. Wenn das Ziel ist zu verstehen, wie es funktioniert, anstatt einfach eine Lösung zu haben, wird es wahrscheinlich ein bisschen mehr als das ... vielleicht sollte ich über dieses Problem bloggen (ich sollte wahrscheinlich nicht faul sein und tatsächlich die Spaltenlisten erstellen statt Verwenden Sie einfach SELECT *).
%Vor%Das klingt so, als ob Sie nur wissen möchten, in welcher Tabelle und Spalte einige Daten gespeichert sind, nicht, dass Sie dies während der Ausführung Ihres Codes wissen oder ändern möchten. Ich hatte auch dieses Problem und das hat es gelöst:
Laden Sie Ihre Datenbank im SQL-Format herunter (z. B. mit phpmyadmin), öffnen Sie sie mit einem Texteditor und suchen Sie nach den gewünschten Vorkommen.
Cutesie wenig Work-Around, dass ein bisschen mehr Eingabe ODER Excel-Clipping / Formatierung beinhaltet:
Invertieren Sie den Operator IN
in einer WHERE
-Klausel als VALUE IN <fields>
(im Gegensatz zum häufigeren Anwendungsfall von FIELD IN <values>
).
Da varchar ein ziemlich formbarer Datentyp ist, wird dies ziemlich narrensicher (Sie können ISNULL
/ NULLIF
nach Bedarf modifizieren) und kann je nach Anwendungsfall wahrscheinlich für mehr als einen Suchwert verwendet werden.
Ich bin auf dieses Problem gestoßen, normalerweise nach dem Hochladen von Daten aus einer CSV-Datei, wo ich die Kommas ändern musste, in Textfeldern, damit die Daten richtig geladen werden & amp; einmal in SQL Server kommt die Notwendigkeit, das geänderte Zeichen zurück zu einem Komma & amp; Es ist hilfreich, die gesamte Tabelle durchsuchen zu können. Greg Robidoux bei mssqltips hat eine Stored Procedure gepostet, die genau das tut, die Spalten einer bestimmten Tabelle nach einem bestimmten String-Wert durchsucht. Sie können es zusammen mit einem SPROC finden, der nicht den Cursor & amp; mehr Details hier:
Ich habe den ursprünglichen SPROC unten gepostet:
%Vor%Tags und Links sql sql-server