2010-09-28 4 views
2

Ce test vérifie si seul un SP se termine par Insérer, Charger ou Enregistrer, puis il réussit.Test si la table a au moins une certaine procédure stockée, sinon échec du test C#

//Query to find SPs for a certain Table name 
string check_SP = 
    "SELECT ROUTINE_NAME, ROUTINE_DEFINITION " + 
    "FROM INFORMATION_SCHEMA.ROUTINES " + 
    "WHERE ROUTINE_DEFINITION LIKE '%CLNT_" + Table_Name + "%' " + 
    "AND ROUTINE_TYPE='PROCEDURE'"; 

conn2.Open(); 
SqlCommand cmd_SP = new SqlCommand(check_SP, conn2); 
list_SP = cmd_SP.ExecuteReader(); //Write 'check_SP' query results to 'list_SP' 

while (list_SP.Read()) 
{ 
    if (list_SP[0].ToString().EndsWith("Insert") 
     || list_SP[0].ToString().EndsWith("Load") 
     || list_SP[0].ToString().EndsWith("Save")) 
    { 
     Console.WriteLine(list_SP[0]); 
     test = true; 
    } 
    else 
    { 
     Console.WriteLine("Missing SP"); 
     test = false; 
     break; 
    }      
} 

Ce que je veux faire est de briser la boucle while chaque fois qu'il n'y a pas de procédure stockée qui se termine par insertion ou de charge, ou Enregistrer. (c'est-à-dire que chaque table doit avoir au moins ces trois SP, sinon le test échouera)

+1

Vous ne pouvez pas l'aider: Vous le faites wroooooooooong! –

+0

Au lieu de le faire dans votre application, pourquoi ne pas faire: 'SELECT Suffixe FROM (SELECT 'Insérer' AS Suffixe UNION ALL SELECT 'Charger' AS Suffixe UNION ALL SELECT 'Enregistrer' Suffixe AS) Suffixe de la jointure externe gauche INFORMATION_SCHEMA.ROUTINES r sur ROUTINE_DEFINITION LIKE '% CLNT_table_name%' + Suffixe AND ROUTINE_TYPE = 'PROCEDURE' groupe par Suffixe ayant COUNT (ROUTINE_TYPE) <> 1' –

+0

@Jon: Si je faisais bien, je ne ferai pas un post ici !! – Reda

Répondre

3

Laissant de côté si c'est la bonne façon de le faire ou pas, vous devrez changer votre logique pour vérifier l'existence de chaque type de procédure individuellement:

bool insertExists = false; 
bool loadExists = false; 
bool saveExists = false; 
while (list_SP.Read()) 
{ 
    if (list_SP[0].ToString().EndsWith("Insert")) 
    { 
     insertExists = true; 
    } 
    if (list_SP[0].ToString().EndsWith("Load")) 
    { 
     loadExists = true; 
    } 
    if (list_SP[0].ToString().EndsWith("Save")) 
    { 
     saveExists = true; 
    } 
    if (insertExists && loadExists && saveExists) 
    { 
     Console.WriteLine("All three exist"); 
     break; 
    } 
} 

if (!insertExists) 
{ 
    Console.WriteLine("Missing insert"); 
} 
if (!loadExists) 
{ 
    Console.WriteLine("Missing load"); 
} 
if (!saveExists) 
{ 
    Console.WriteLine("Missing save"); 
} 
+0

thx Chris J'apprécie votre aide – Reda

Questions connexes