IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Recherche dans toutes les dates de la DB [2008R2]


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut Recherche dans toutes les dates de la DB
    Bonjour,

    Aujourd'hui j'ai un bug étrange avec une donnée en 2070.
    J'ai beau retourner mon code source, je ne trouve rien qui corresponde.
    Alors je décide de créer une requête qui va rechercher dans la DB toutes les dates après 2070 dans toutes les tables.
    J'ai trouvé et résolu mon problème, cool.

    Cependant ma requête me sort quand même les colonnes de type entier, alors que j'ai choisis les types dates (40,42,61) .
    Si qqun a une idée.

    Merci a +

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    DECLARE @Table varchar(75)
    DECLARE @Colonne varchar(75)
    DECLARE @sqlCommand varchar(1000)
    DECLARE @Valeur varchar(75) = '20200101'
    create table ##Resultat([Table] varchar(75), Colonne varchar(75), Valeur Datetime2)
     
    DECLARE ColCur CURSOR FOR
    		Select Object_name(C.object_id) [Table],C.name Colonne
    		From sys.columns C
    		where C.system_type_id in (40,42,61) and Object_name(C.object_id) not like 'sys%'
    		order by Object_name(C.object_id)
     
    OPEN ColCur
    FETCH NEXT FROM ColCur INTO @Table, @Colonne
    WHILE @@FETCH_STATUS = 0
    BEGIN
    	SET @sqlCommand = 'Insert into ##Resultat SELECT DISTINCT ''' + @Table + ''' [Table],'''+@Colonne+''' Colonne, '+@Colonne+' Valeur FROM ' + @Table +' WHERE '+@Colonne+' >= ''' + @Valeur + ''''
    	print @sqlCommand
    	EXEC (@sqlCommand)
     
    	FETCH NEXT FROM ColCur INTO @Table, @Colonne
    END
    CLOSE ColCur;
    DEALLOCATE ColCur;
    select * from ##Resultat
    drop table ##Resultat

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    C'est assez étrange...

    N'utilisez vous que le schéma dbo dans votre base, ou avez-vous également des tables dans un autre schéma ?

    Pouvez-vous poster le script DDL de création d'une des tables remontant dans votre rapport avec une colonne INT ?

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Lance les 2 instructions suivantes :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    EXEC sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE ;
    GO
    EXEC sp_configure 
    GO

    Puis vérifie à tout hasard la valeur de l’option 'two digit year cutoff'. Par défaut elle est définie à 2049. je ne suis pas sûr que le problème provient de là, mais on ne sait jamais (?).

    Puis refaire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    EXEC sp_configure 'show advanced options', 0;
    GO
    RECONFIGURE ;
    GO
    A+

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    La remarque de aieeeuuuuu est pertinente. En effet, on peut très facilement reproduire cette soit disant anomalie qui en réalité n’en est pas une, et c’est ce que j’ai fait ! Il suffit pour cela de créer, en plus du schéma dbo, un 2ème schéma (exemple nommé Production) puis dans ce nouveau schéma créer des tables avec des colonnes portant exactement les mêmes noms que les tables et colonnes du schéma dbo, mais dotées de type différent (exemple int au lieu de datetime).
    Donc il faut absolument que vous rajoutiez dans votre requête le nom du schéma.
    Votre "select distinct" actuel est plus qu’hasardeux ! Il faut préciser le nom du schéma.
    Il faut également, pour mieux comprendre et cerner le problème, vérifier le schéma par défaut de l’utilisateur de la base de donnée, lequel mappé à la connexion avec laquelle vous vous êtes connectés pour effectuer vos contrôles etc. En effet, cela a un lien direct avec la résolution du nom lorsque le schéma n’est pas explicitement précisé, ce qui est votre cas.

    A+

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut
    Merci pour votre aide les gars.

    en fait il s'agit des vues qui passent comme INT (je comprends pas plus)

    Avec ce script que je partage avec vous ça marche mieux

    A+

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    DECLARE @Table varchar(75)
    DECLARE @Colonne varchar(75)
    DECLARE @sqlCommand varchar(1000)
    DECLARE @Valeur varchar(75) = '20200101'
    create table ##Resultat([Table] varchar(75), Colonne varchar(75), Valeur Datetime2)
     
    DECLARE ColCur CURSOR FOR
    		Select T.name [Table],C.name Colonne
    		From sys.columns C
    		inner join sys.tables T on T.object_id=C.object_id
    		where C.system_type_id in (40,42,61) and T.name not like 'sys%'
    		order by T.name
     
    OPEN ColCur
    FETCH NEXT FROM ColCur INTO @Table, @Colonne
    WHILE @@FETCH_STATUS = 0
    BEGIN
    	SET @sqlCommand = 'Insert into ##Resultat SELECT DISTINCT ''' + @Table + ''' [Table],'''+@Colonne+''' Colonne, '+@Colonne+' Valeur FROM ' + @Table +' WHERE '+@Colonne+' >= ''' + @Valeur + ''''
    	print @sqlCommand
    	EXEC (@sqlCommand)
     
    	FETCH NEXT FROM ColCur INTO @Table, @Colonne
    END
    CLOSE ColCur;
    DEALLOCATE ColCur;
    select * from ##Resultat
    drop table ##Resultat

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    La nouvelle version de votre script ne fait toujours pas référence au nom du schéma ! Vous n’avez donc pas suivi les conseils donnés ci-haut.
    Que donne le résultat des deux requêtes SQL ci-dessous :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT s.name as schema_name_for_table
       , t.name as Table_name
       , c.name as column_name 		   
       , c.user_type_id as column_user_type_id
       , y.name as column_user_type_name 
    FROM sys.columns c 
    INNER JOIN sys.types y 
      ON y.user_type_id = c.user_type_id
    INNER JOIN sys.tables  t 
      ON t.object_id = c.object_id
    INNER JOIN  sys.schemas  s
    	ON s.schema_id = t.schema_id
    WHERE  s.name <> 'dbo' 
    AND c.user_type_id NOT IN (40, 42, 61)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT s.name as schema_name_for_view
       , v.name as view_name
       , c.name as column_name
       , c.user_type_id as column_user_type_id
       , y.name as column_user_type_name 
    FROM sys.columns c 
    INNER JOIN sys.types y 
      ON y.user_type_id = c.user_type_id
    INNER JOIN sys.views  v 
      ON v.object_id = c.object_id
    INNER JOIN  sys.schemas  s
    	ON s.schema_id = v.schema_id
    WHERE s.name <> 'dbo' 		
    AND c.user_type_id NOT IN (40, 42, 61)

    A+

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2008
    Messages
    699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Octobre 2008
    Messages : 699
    Par défaut
    Si si, enfin non.

    J'ai fais une version en mettant en dur dbo.<nom de la table> et le problème se produisait toujours, car il s'agissait des vues.
    En utilisant une jointure sur sys.tables les vues sortent de la requête et le "bug" ne se produit plus.
    Du coup j'ai retirer le "dbo." et arrêté les recherches.

    Sinon, les deux requêtes que vous donnez, ne donnent aucun résultat chez moi.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche dans toutes les tables
    Par thiseo dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/02/2013, 16h18
  2. [XL-2003] Recherche dans toutes les feuilles
    Par Vadorblanc dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/11/2010, 18h55
  3. [Toutes versions] Recherche dans toutes les tables
    Par SnaKum dans le forum IHM
    Réponses: 7
    Dernier message: 08/03/2010, 16h48
  4. Recherche dans toutes les feuilles
    Par wabo67 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/01/2009, 09h11
  5. Rechercher dans toutes les colonnes d'un datatable
    Par timotep dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/11/2007, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo