You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Table-Valued parameter的IN子句返回全表数据而非指定值问题排查

排查Table-Valued Parameter(TVP)配合IN子句返回全表数据的问题

核心问题出在存储过程的子查询字段匹配错误:

你创建的TVP类型StringsList定义的列名是Id,但在存储过程的WHERE子句里,你从@ListIds中查询的是MASTER_CUSTOMER_ID——这个字段在TVP里根本不存在,导致子查询返回的是NULL集合。当[MASTER_CUSTOMER_ID] IN (NULL)时,数据库对每一行的判断结果都是UNKNOWN,不会过滤任何数据,最终返回了全表的12万条记录。

修正后的存储过程代码

CREATE OR ALTER PROCEDURE [dbo].[GetMemberInfoAndMemberSubscriptions] ( @ListIds StringsList READONLY)
AS
BEGIN
   SELECT [MASTER_CUSTOMER_ID], USR_SPE_Membership_Status 
   FROM CUSTOMER 
   WHERE [MASTER_CUSTOMER_ID] IN (SELECT [Id] FROM @ListIds)
END

额外验证点

  • 你的C#代码中DataTable的列名Id和TVP的列名完全匹配,这部分是正确的,不需要修改
  • 可以在存储过程里先执行SELECT * FROM @ListIds验证传入的6个ID是否正确传入,确认数据无误后再关联查询

内容的提问来源于stack exchange,提问作者James123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 03:15:48