是否可以创建一个函数/过程,该函数/过程可以在这样的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;