检索表的值并使用存储过程中的值

时间:2013-12-05 11:19:36

标签: sql sql-server-2012

我是SQL Server 2012的初学者;我需要在存储过程中生成product ID,我在C#中生成ID的一部分,ID的一部分包括Industrialist ID,并将其传递给我的存储过程。在存储过程中,我需要我的Industrialist编号的最后一个产品,并在我的存储过程中保存为SQL变量。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

有许多方法可以在SQL和C#之间传递项目,您可以使用output parameter来填充存储过程中的参数。

string variableName;
using (var conn = new SqlConnection("**connection string**"))
using (var cmd = new SqlCommand("storedProcedureName", conn))
{
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("inputParameter", inputParameter);
    var outputParameter = new SqlParameter(){
        ParameterName="ParameterName"
        ,Direction = ParameterDirection.Output
        ,SqlDbType = SqlDbType.VarChar
        ,DbType = DbType.VarChar
    };
    conn.Open();
    try
    {
        cmd.ExecuteNonQuery();
        variableName = string.Format("{0}", outputParameter.Value);
    }
    catch{}
    finally
    {
        conn.Close();
    }
}

您可以在程序中使用RETURN @returnValue行中的某些内容返回值,也可以在表格中返回。

string variableName;
using (var conn = new SqlConnection("**connection string**"))
using (var cmd = new SqlCommand("storedProcedureName", conn))
{
    cmd.CommandType = System.Data.CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("inputParameter", inputParameter);
    conn.Open();
    try
    {
        using (var dbReader = cmd.ExecuteReader())
        {
            if (dbReader.Read())
            {
                variableName = string.Format("{0}", dbReader["ColumnName"]);
            }
        }
    }
    catch{}
    finally
    {
        conn.Close();
    }
}

可能有效的存储过程的一般示例:

CREATE PROC [dbo].[storedProcedureName]
    @InputParameter VARCHAR
    ,@OutputParameter VARCHAR OUTPUT
AS BEGIN
    DECLARE @insertedId INT;
    BEGIN TRANSACTION
        INSERT INTO TableName (...Column Names...) 
        VALUES (... Values...)
        SET @insertedId = SCOPE_IDENTITY()
    COMMIT
    SELECT @OutputParameter = ColumnName 
    FROM TableName
    WHERE IdColumnName = @insertedId
END

编辑:可能更相关:

CREATE PROC [dbo].[storedProcedureName]
    @IndustrialistId INT
    ,@OutputParameter VARCHAR OUTPUT -- This might be an int, but it's unclear what you want
AS BEGIN
    DECLARE @productId INT;
    SELECT @productId = MAX(ProductId) 
    FROM  Products 
    WHERE IndustrialistId = @IndustrialistId;

    SET @OutputParameter = CONVERT(VARCHAR,@IndustrialistId) + '-' + CONVERT(VARCHAR,@productId)
END

如果您要提供一些代码,那么某人可能会更容易为您提供更具针对性的响应。以上代码都没有经过语法检查等等,所以应该考虑更多伪代码,但希望它能为你提供一些工具。