SQL Server存储过程,如果表存在,则返回布尔值,c#实现

本文关键字:布尔值 返回 实现 Server 存储过程 如果 SQL 存在 | 更新日期: 2023-09-27 18:24:26

我创建了一个存储过程,它接受一个参数,即表的名称,如果它在数据库中存在,则返回1,如果不存在则返回0。在SQLServerManagementStudio中,测试我的存储过程可以完全按照我希望的方式工作,但是我很难在C#程序中使用该值。

我的选项似乎是ExecuteScalar()ExecuteNonQuery()ExecuteReader(),它们似乎都不适合该任务,我甚至无法使用它们来检索存储过程的结果。

我再次尝试用cmd.Parameters.AddWithValuecmd.Parameters.Add分配我的参数,但没有成功。

SQL Server存储过程,如果表存在,则返回布尔值,c#实现

假设您有这样一个存储过程,它选择0(表不存在)或1(表存在)

CREATE PROCEDURE dbo.DoesTableExist (@TableName NVARCHAR(100))
AS 
BEGIN
    IF EXISTS (SELECT * FROM sys.tables WHERE Name = @TableName)
        SELECT 1
    ELSE
        SELECT 0  
END

然后您可以编写这个C#代码来获得值-使用.ExecuteScalar(),因为您只需要一行、一列:

// set up connection and command
using (SqlConnection conn = new SqlConnection("your-connection-string-here"))
using (SqlCommand cmd = new SqlCommand("dbo.DoesTableExist", conn))
{
    // define command to be stored procedure
    cmd.CommandType = CommandType.StoredProcedure;
    // add parameter
    cmd.Parameters.Add("@TableName", SqlDbType.NVarChar, 100).Value = "your-table-name-here";
    // open connection, execute command, close connection
    conn.Open();
    int result = (int)cmd.ExecuteScalar();
    conn.Close();
}

现在,如果表不存在,result将包含0,如果表存在,则包含1

使用此:

 var returnParameter = cmd.Parameters.Add("@ReturnVal", SqlDbType.Int);
 returnParameter.Direction = ParameterDirection.ReturnValue;

您的存储过程应返回0或1。