我正在尝试创建一个存储过程,将 TVP 传递给该过程,然后将 TVP 中的一些数据插入到两个表中。
我已经实现了存储过程,但只有第二个插入(唯一不从 TVP 读取的)在工作。另外两个不起作用(不要插入任何东西),我似乎无法弄清楚原因。
我试图在 SQL Server 中创建一个虚拟 TVP 并在那里运行该过程,但这也不起作用。这是因为 TVP 是只读的吗?我不会假设,因为我实际上并没有在 TVP 中插入或更新数据。
有没有办法使这项工作?
谢谢您的帮助!
表值参数定义:
CREATE TYPE dbo.Ingredients
AS TABLE
(
Quantity int,
Measure nvarchar(50),
Ingredient nvarchar(50),
)
GO
Run Code Online (Sandbox Code Playgroud)
存储过程:
ALTER PROCEDURE uspCreateRecipe
(@IDUser int,
@RecipeName nvarchar(50),
@Category nvarchar(50),
@Difficulty nvarchar(50),
@Duration nvarchar(50),
@ING dbo.Ingredients READONLY,
@Execution text)
AS
BEGIN
INSERT INTO dbo.Ingredients
VALUES ((SELECT Ingredient FROM @ING WHERE NOT EXISTS (SELECT Ingredient FROM @ING WHERE Ingredient IN (SELECT IngredientName FROM dbo.Ingredients))), 2)
INSERT …Run Code Online (Sandbox Code Playgroud) sql t-sql sql-server stored-procedures table-valued-parameters