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

将DataTable传入带表值参数的SQL存储过程时遇无数据问题

问题分析与解决

核心原因:未在存储过程调用中传递参数

你的代码里ExecuteSqlRaw的执行语句没有把定义好的表值参数传递给存储过程,导致存储过程根本接收不到数据。正确的调用需要在EXEC语句里指定参数:

var response = this.Database.ExecuteSqlRaw("EXEC [dbo].[sp_InsertStagingData] @TVP_StagingData", parameter);

其他可能的排查点

如果修正后还是有问题,检查以下几点:

  • DataTable列与表值类型匹配:确保DataTable的列名、数据类型、顺序和SQL Server中dbo.dataType表值类型的定义完全一致,包括大小写(SQL Server默认不区分,但严格匹配更稳妥)。
  • 表值类型存在性:确认dbo.dataType在目标数据库中已正确创建,架构(dbo)无误。
  • DataTable行状态:确保DataTable中的行不是Deleted状态,只有Added或Unchanged状态的行才会被传递到SQL Server。
  • 参数名称一致性:存储过程的参数名称必须和你定义的@TVP_StagingData完全一致,包括前缀@。

验证方法

可以在存储过程里添加日志输出,确认参数接收情况:

CREATE PROCEDURE [dbo].[sp_InsertStagingData]
    @TVP_StagingData dbo.dataType READONLY
AS
BEGIN
    -- 记录参数行数到日志表(需提前创建LogTable)
    INSERT INTO LogTable (LogMessage, CreateTime)
    SELECT 'Received TVP rows: ' + CAST(COUNT(*) AS VARCHAR(10)), GETDATE() FROM @TVP_StagingData;
    
    -- 原有业务逻辑
    -- ...
END

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:15:49