内联SQL函数,有时必须更新数据库



是否可以创建一个函数/过程,该函数/过程可以在这样的SQL语句中使用:

INSERT INTO Journal(ProductID,Quantity) VALUES(LookupOrCreateProduct('12345678'),5)

LookupOrCreateProduct应按字符串(条形码)查找产品表,并:
*如果找到条形码-返回产品ID
*如果找不到条形码-在"产品"表中用新条形码创建一个新记录,并返回其ID

我研究了SQL Server函数,但它们不允许在函数体内修改INSERT或任何其他数据库。存储过程可以返回值,但它们只能是int类型。我的ID栏是bigint。另一种选择是使用输出参数,但我不清楚如何在SQL语句中内联它。非常感谢。

CREATE PROCEDURE LookupOrCreateProduct 
   @BarCode    VARCHAR(100),
   @ProductID  BIGINT OUTPUT
AS
BEGIN
   SET NOCOUNT ON;

       SELECT TOP 1 @ProductID = ProductID
       FROM dbo.Products 
       WHERE BarCode = @BarCode
   IF(@ProductID IS NULL)
    BEGIN
      INSERT INTO dbo.Products(Barcode)
      VALUES (@BarCode)
      SET @ProductID = SCOPE_IDENTITY();
    END   
END

我认为你能做的最好的事情就是在存储过程中设置一个输出参数:

declare @product_id int;
begin transaction;
exec dbo.LookupOrCreateProduct '12345678', @product_id out;
insert into journal (productId, quantity) values (@product_id, 5);
commit transaction;

相关内容

  • 没有找到相关文章

最新更新