Ich möchte einen bestimmten Wert in meiner Datenbank suchen, den ich nicht weiß, wo es genau ist. Gibt es eine Abfrage, die den Spaltennamen oder den Tabellennamen eines bestimmten Werts im SQL Server zurückgegeben hat? Angenommen, ich habe den Wert einer Spalte wie 123, aber ich weiß nicht, dass 123 zu welcher Tabelle gehört und ich weiß nichts über den Spaltennamen. Kann ich eine Abfrage schreiben, um Tabellennamen zu finden, in denen dieser Wert enthalten ist? Ich brauche eine Abfrage, keine Prozedur !!!finde Spaltenname oder Tabellenname eines bestimmten Wertes
-2
A
Antwort
0
Dies könnte es für Sie tun. Beachten Sie, dass dies bei einer großen Anzahl von Tabellen/Spalten eine ganze Weile dauern kann. Wenn Sie nicht in (N)VARCHAR
Spalten suchen, möchten Sie diese Typen möglicherweise zur c.DATA_TYPE NOT IN(...
-Klausel hinzufügen. Oder einen anderen Typ, in den Sie nicht hineinschauen (wie FLOAT
oder DECIMAL
).
SET NOCOUNT ON;
DECLARE @value NVARCHAR(MAX)='123';
CREATE TABLE #found(table_name SYSNAME,column_name SYSNAME);
DECLARE @sql NVARCHAR(MAX)=(
SELECT
'INSERT INTO #found(table_name,column_name) ' +
'SELECT TOP 1 '+
'table_name='''+REPLACE(t.TABLE_NAME,'''','''''')+''','+
'column_name='''+REPLACE(c.COLUMN_NAME,'''','''''')+''' '+
'FROM '+
QUOTENAME(t.TABLE_SCHEMA)+'.'+QUOTENAME(t.TABLE_NAME)+' '+
'WHERE '+
QUOTENAME(c.COLUMN_NAME)+'='''+REPLACE(@value,'''','''''')+''';'
FROM
INFORMATION_SCHEMA.TABLES AS t
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS c ON
c.TABLE_SCHEMA=t.TABLE_SCHEMA AND
c.TABLE_NAME=t.TABLE_NAME
WHERE
t.TABLE_TYPE='BASE TABLE' AND
c.DATA_TYPE NOT IN('BIT','NTEXT','TEXT','IMAGE','BINARY','VARBINARY','DATETIME','DATE','DATETIME2','TIME','SMALLDATETIME','DATETIMEOFFSET')
FOR XML
PATH('')
);
EXECUTE (@sql);
SELECT * FROM #found ORDER BY table_name,column_name;
DROP TABLE #found;
+0
Hinweis: Es kann besser sein, die gesuchten Typen einzuschränken, indem Sie 'c.DATA_TYPE IN (...' anstatt 'c.DATA_TYPE NOT IN (...') eingeben, wenn Sie wissen, welche Datentypen Sie suchen im. –
Verwandte Themen
- 1. R: Finde Duplikate, die innerhalb eines bestimmten Wertes liegen
- 2. Finde Kinder eines bestimmten Typs
- 3. Epplus finde Spalte mit Spaltenname
- 4. Wie finde ich die Position eines bestimmten Wertes bei einem zweiten Array?
- 5. Wie finde ich die Existenz eines Wertes in JSON
- 6. Finde den Index eines Wertes in einem Array
- 7. Wie finde ich die n-te Wurzel eines Wertes?
- 8. Rails 3, Ändern eines bestimmten Wertes in einer Zeile
- 9. Count DIFFDATE Überschreiten eines bestimmten Wertes - Schritt 3
- 10. Zählen der Anzahl der Erscheinungen eines bestimmten Wertes in r
- 11. Anzahl des Auftretens eines bestimmten Wertes im mehrdimensionalen Array
- 12. Wie für jedes Auftreten eines bestimmten Wertes neue Zeilen erstellen
- 13. Python Pandas Zählen der Vorkommen eines bestimmten Wertes
- 14. Count DIFFDATE Überschreitung eines bestimmten Wertes - Schritt 2
- 15. Kombinationsfeld Display eines Wertes
- 16. Count DatDiff einen bestimmten Wertes Überschreiten
- 17. Wie erhalten Sie die Pixelindizes eines bestimmten RGB-Wertes eines Bildes in Python?
- 18. Tabellenname Anzeige
- 19. Jackson Polymorphe Deserialisierung - Können Sie die Existenz eines Feldes anstelle eines bestimmten Wertes verlangen?
- 20. Pandas, Zählen eines einzelnen Wertes in einer Spalte eines Datenrahmens
- 21. Aufruf eines Benutzerformulars und Rückgabe eines Wertes
- 22. Ändern eines Wertes eines Textfelds in Javascript
- 23. Vergleichen eines Integral- und eines Floating-Wertes
- 24. Funktionsproblem beim Zurückgeben eines Wertes
- 25. Rückgabe eines Wertes von AlertDialog
- 26. Rückgabe eines Wertes mit Moment.js
- 27. Ermitteln des Wertes eines Funktionsumfangs
- 28. Tweening eines Wertes in Lua
- 29. Ändern eines Wertes in SQLite3
- 30. Entfernen eines Wertes aus Array
Wenn dies eine von Ihnen entworfene Datenbank ist, ist dies wahrscheinlich ein Zeichen für ein fehlerhaftes Datenmodell. Werte des gleichen "Typs", so dass die Werte vergleichbar oder berechenbar sind * sollte * in einer Spalte einer Tabelle gespeichert werden. Wenn sie über mehrere Spalten/Tabellen hinweg gespeichert werden, werden Werte, die eigentlich Daten sein sollten, stattdessen als Metadaten in das Modell eingebettet, z. B. Spalten- oder Tabellennamen. –