Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 测试表是否至少有某些存储过程,否则测试c失败_C#_Sql Server_Stored Procedures - Fatal编程技术网

C# 测试表是否至少有某些存储过程,否则测试c失败

C# 测试表是否至少有某些存储过程,否则测试c失败,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,此测试将检查是否只有一个SP以Insert、Load或Save结尾,然后检查是否成功 //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_N

此测试将检查是否只有一个SP以Insert、Load或Save结尾,然后检查是否成功

//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;
    }                    
}

我想做的是在没有以Insert、Load或Save结尾的存储过程时中断while循环。i、 e.每个表应至少有这三个SP,否则测试将失败

撇开这是否是正确的方法不谈,您需要更改逻辑以分别检查每种类型的程序是否存在:

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");
}

情不自禁:你在胡闹!为什么不在应用程序中执行此操作:从中选择后缀选择“插入”作为后缀联合所有选择“加载”作为后缀联合所有选择“保存”作为后缀左外部连接信息\u SCHEMA.ROUTINES r on ROUTINE\u定义如“%CLNT\u table\u name%”+后缀和例程\u TYPE='PROCEDURE'按后缀分组,具有COUNTROUTINE\u类型 1@Jon:如果我做得对,我就不会在这里发帖了@马丁:我很感谢你的帮助,但我需要c代码