是否可以创建一个函数/过程,可以在这样的SQL语句中使用:
INSERT INTO Journal(ProductID,Quantity) VALUES(LookupOrCreateProduct('12345678'),5)
LookupOrCreateProduct
应该按字符串(条形码)查找产品表,并且:
*如果找到条形码 - 返回产品编号
*如果未找到条形码 - 使用新条形码在Products表中创建新记录并返回其ID
我探索了SQL Server函数,但它们不允许INSERT
或函数体内的任何其他数据库修改。存储过程可以返回值,但它们只能是int
类型。我的ID列为bigint
。另一种选择是使用输出参数但是我不清楚,我如何在SQL语句中内联它。谢谢。
答案 0 :(得分:2)
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
答案 1 :(得分:1)
我认为您可以做的最好的事情是存储过程中的输出参数:
declare @product_id int;
begin transaction;
exec dbo.LookupOrCreateProduct '12345678', @product_id out;
insert into journal (productId, quantity) values (@product_id, 5);
commit transaction;