我是SQL Server 2012的初学者;我需要在存储过程中生成product ID
,我在C#中生成ID的一部分,ID的一部分包括Industrialist ID
,并将其传递给我的存储过程。在存储过程中,我需要我的Industrialist编号的最后一个产品,并在我的存储过程中保存为SQL变量。我怎么能这样做?
答案 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
如果您要提供一些代码,那么某人可能会更容易为您提供更具针对性的响应。以上代码都没有经过语法检查等等,所以应该考虑更多伪代码,但希望它能为你提供一些工具。