MSSQL语句IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('存储过程名') AND OBJECTPROPERTY(id, 'IsProcedure') = 1)

解决方案 »

  1.   

    看看下面的程序是否能符合你的要求:1.在Nothwind中建立一个Store Procedure:
    CREATE PROCEDURE GetCustomer (@CustomerID nchar(5)) AS SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM Customers WHERE CustomerID = @CustomerID RETURN2.将Table [customers]中的CustomerID改为[customer id](目的是为了产生错误,用完一定要改回去).3.建立一段如下的C#程序:
    string source="server=localhost;uid=sa;pwd=;database=Northwind";
    string select="SELECT * FROM Customers";
    SqlConnection conn=new SqlConnection(source);
    SqlDataAdapter da = new SqlDataAdapter(select, conn);
    DataSet ds = new DataSet();
    da.Fill(ds, "Customers");
    dataGrid1.DataSource = ds;
    dataGrid1.DataMember = "Customers";
    } private void button2_Click(object sender, System.EventArgs e)
    {
    string source="server=localhost;uid=sa;pwd=;database=Northwind";
    SqlConnection conn = new SqlConnection(source);
    SqlDataReader rdr = null;
    try
    {
    conn.Open();

    SqlCommand cmd = conn.CreateCommand();
    cmd.CommandText = "GetCustomer"; cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5);
    cmd.Parameters[0].Value = "ALFKI"; rdr = cmd.ExecuteReader();
    if (rdr.Read())
    MessageBox.Show((rdr["CompanyName"]).ToString());
    else
    MessageBox.Show("No customer found");
    rdr.Close();
    }
    catch(SqlException ex)
    {
    string strErr = "错误号: " + ex.Number.ToString() 
    + " 所在存储过程: " + ex.Procedure 
    + " 错误信息描述: " + ex.Message
    MessageBox.Show(strErr);
    }
    finally
    {
    conn.Close();
    }更多的错误信息,请参考SqlException.上面只是一个简单的方法,
    如果你要纯粹检验Sql store procedure语法的话,要使用事务,把执行成功的存储过程rollback回去.
    其实,要单纯检验,在Sql Server的查询分析器中作,要快的多.