gpt4 book ai didi

sql - MsSQL 不使用 sp_executesql 传递用户定义的表类型

转载 作者:行者123 更新时间:2023-12-04 17:48:38 24 4
gpt4 key购买 nike

我正在尝试将我的用户定义表类型传递给存储过程(最初使用 EF)。但是,我被卡住了,因为它看起来像 sp_executesql 将参数传递给存储过程,但它是空的。检查一下,这是类型:

CREATE TYPE [dbo].[BigIntList] AS TABLE(
[Item] [bigint] NULL
)

存储过程如下:

CREATE PROCEDURE [dbo].[MyProcedure]
@bookEntryIds [dbo].[BigIntList] READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM @bookEntryIds
END

这就是困扰我的地方:

DECLARE @bookEntryIds [dbo].[BigIntList]
INSERT INTO @bookEntryIds VALUES (50181)
INSERT INTO @bookEntryIds VALUES (40182)

-- 1. This returns 50181 and 40182
EXEC [dbo].[MyProcedure] @bookEntryIds

-- 2. This returns empty result with column "Item"
EXEC sp_executesql N'[dbo].[MyProcedure]', N'@bookEntryIds [dbo].[BigIntList] READONLY', @bookEntryIds

第二个查询由 Entity Framework 使用,所以我需要它工作。你能告诉我它有什么问题吗?我咨询了几个指南如何执行此操作,我在这里没有发现任何问题。

我尝试将类型更改为字符串 (VARCHAR(100)),但结果是一样的。我在 SQL Server 2016 上运行它,但在 2014 版本的开发(托管)机器上也会发生同样的情况。

感谢您的帮助。

马丁

编辑 - @sepupic 的解决方案:

如果您受到 Pass table value type to SQL Server stored procedure via Entity Framework 的启发请像我一样确保传递参数 (!),例如:

context.Database.ExecuteSqlCommand("[dbo].[MyProcedure] @bookEntryIds", parameter);

最佳答案

-- 2. This returns empty result with column "Item"
EXEC sp_executesql N'[dbo].[MyProcedure]', N'@bookEntryIds [dbo].[BigIntList] READONLY', @bookEntryIds

结果是空的,因为你忘了传入参数,它应该是这样的:

EXEC sp_executesql N'[dbo].[MyProcedure] @bookEntryIds = @bookEntryIds', N'@bookEntryIds [dbo].[BigIntList] READONLY', @bookEntryIds

关于sql - MsSQL 不使用 sp_executesql 传递用户定义的表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46908349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com