J'essaie de rechercher une valeur dans ma base de données Microsoft SQL Server 2008, mais je ne sais pas dans quelle colonne ou dans quelle table regarder. J'essaie de créer une requête qui apparaîtra dans toutes les tables et toutes les colonnes pour ma valeur.Comment écrire une requête SQL qui recherche une valeur dans toutes les colonnes et toutes les tables de ma base de données?
Répondre
Vous pourriez probablement le faire en utilisant SQL dynamique en utilisant sys.cols & sys.tables vous devriez être capable de créer la requête.
Il s'agira probablement d'une requête extrêmement longue.
Je repensée ma réponse et si vous exécutez la requête ci-dessous, il va générer un certain nombre d'instructions SQL, si vous exécutez ces déclarations, vous trouverez sur quelle colonne a la valeur souhaitée. Remplacez simplement [votre valeur ici] par la valeur appropriée. C'est en supposant que votre valeur est un varchar.
SELECT 'SELECT ''' + TABLE_NAME + '.' + column_name +
''' FROM ' + TABLE_NAME + ' WHERE ' +
column_name + ' = ''[your value here]'''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar';
je suis ok avec une longue requête. Une fois que je l'ai trouvé, j'ai terminé et je n'aurai plus besoin de le relancer. – ajma
Vous ne pouvez pas avec SQL simple. Sauf si vous utilisez un outil qui fait cela (PL/SQL developer pour Oracle).
Vous ne pouvez pas le faire en une seule requête. Vous allez devoir parcourir les vues info sys.tables et sys.columns et construire plusieurs requêtes (une seule pour chaque table) qui chercheront dans tous les champs de votre valeur dans une construction OR très longue (une pour chaque champ).
Je risque d'être downvoted sur ce beau jour 1st april
, mais je pense qu'il sera plus facile de grep
le fichier de données dans ce cas.
La procédure stockée sp_msForEachTable exécute une requête pour chaque table. C'est la partie simple. Regarder dans toutes les colonnes de chaque table devrait être la partie la plus difficile. Au début, ils ont probablement différents types de données. Donc, vous serez probablement seulement capable d'effectuer une comparaison de chaînes.
Mais je suis sûr que cela est possible en utilisant les informations des tables système et certaines procédures système stockées. J'essaierais de trouver une solution pour accéder à une seule colonne sur une seule table où le nom de la table et le nom de la colonne ne sont donnés que comme paramètres de la chaîne. À ce stade, vient à l'esprit Dynamic SQL. Si vous résolviez cela, il deviendrait relativement simple d'obtenir tous les noms de tables avec tous les noms de colonnes des tables système et de les joindre tous ensemble ou de les placer dans une procédure stockée. Je voudrais voir le résultat si vous trouvez une solution.
Je l'ai écrit il y a quelques temps, je ne sais pas exactement ce que c'était. Je me souviens que c'était avant que je connaisse sp_msForEachTable! Vous pourriez avoir besoin d'ajuster les tailles variables (peut aussi bien les faire tous MAX si vous êtes en 2005 +)
create proc SearchForValues (@search varchar(100))
as
Begin
declare @i int
declare @tbl varchar(50)
declare @col varchar(50)
declare @sql varchar(500)
create table #TEMP (id int identity (1,1), colname varchar(50), tblname varchar(50))
insert into #TEMP
select a.name, b.name from dbo.syscolumns a inner join
(
select * from dbo.sysobjects where xtype = 'U'
) b
on a.ID = b.ID
create table #SEARCHRESULT (TblName varchar(50), ColName varchar(50))
If isnumeric(@search) = 0 and @search is not null
begin
set @search = '''' + @search + ''''
end
set @i = 1
While @i <= (select max(id) from #TEMP)
Begin
select @tbl = tblname from #temp where ID = @i
select @col = colname from #temp where ID = @i
set @sql = 'If Exists(select *
from [' + @tbl + ']
where convert(varchar(500), [' + @col + ']) = ' + @search + '
)
Insert Into #SEARCHRESULT (TblName, ColName) Values(''' + @tbl + ''',''' + @col + ''')'
execute (@sql)
set @i = @i + 1
End
drop table #TEMP
select * from #SEARCHRESULT
drop table #SEARCHRESULT
end
- 1. SQL: supprimer toutes les données de toutes les tables disponibles
- 2. Sélectionner toutes les colonnes de toutes les tables dans SQL Server 2008
- 3. Sélectionnez requête dans SQL + Toutes les valeurs dans les colonnes
- 4. Recherche de toutes les colonnes Nullable dans la base de données SQL 2000
- 5. sélection de la première colonne de toutes les tables dans une base de données mysql
- 6. Requête SQL pour rechercher le schéma de toutes les tables
- 7. Comment voir toutes les tables dans une base de données HSQLDB?
- 8. Comment rechercher et remplacer toutes les instances d'une chaîne dans une base de données?
- 9. Comment effectuer par programme une modification sur toutes les procédures stockées dans ma base de données dans SQL 2008
- 10. longueur de la colonne à travers toutes les tables dans une base de données MySQL
- 11. Script toutes les données sur une seule table ou toutes les tables dans Sql Server 2005/8?
- 12. Comment trouver toutes les occurrences de lettres majuscules, d'espaces et de nombres dans une recherche mysql?
- 13. Comment écrire une requête mysql qui va lire les données d'une table et écrire dans une autre?
- 14. Trouver toutes les majuscules dans les colonnes?
- 15. Rechercher tous les champs dans toutes les tables pour une valeur spécifique (Oracle)
- 16. Comment renvoyer les types de données SQL de ma requête?
- 17. Demander un avis: Une séquence pour toutes les tables
- 18. Comment obtenir toutes les tables qui ont des FK dans une autre table?
- 19. Requête MySQL pour max() de toutes les colonnes
- 20. requête SQL écriture où une des cartes de valeur à toutes les valeurs possibles
- 21. SPListItemCollection.GetDataTable() ne retourne pas toutes les colonnes?
- 22. Zend sélectionne toutes les colonnes
- 23. Comment puis-je supprimer toutes les sessions se connectant à ma base de données Oracle?
- 24. Obtenir toutes les données de publication de la requête
- 25. Comment écrire une requête SQL pour ces 5 tables?
- 26. Comment écrire une requête de recherche en utilisant Kohana PHP?
- 27. Rechercher dans toutes les tables Oracle DB
- 28. Recherche de requête SQL pour afficher les données de 2 tables qui ne sont pas commone entre les tables
- 29. Requête pour lister toutes les tables contenant une colonne spécifique avec SQL Server 2005
- 30. Comment lister toutes les tables ou seulement ceux d'une base de données
bonne chance avec la coulée – SQLMason