簡體   English   中英

使用Datatable作為參數的存儲過程不返回任何內容

[英]Stored Procedure with Datatable as param returns nothing

我已經建立了一個存儲過程,該過程將數據表傳遞到實體框架中並直接從中調用。

我用以下sql創建了一個Type:

 CREATE TYPE Regions AS TABLE 
             (      RegionId int, 
                    Region varchar(max),                    
                    BodyId int NULL, 
                    Body varchar(max),
                    AreaId int NULL, 
                    Area varchar(max),   
                    Location varchar(max), 
                    LocationId int
              )

我的測試存儲過程如下:

CREATE PROCEDURE [dbo].[GetStats]

     @regions  dbo.Regions READONLY 

AS
BEGIN

    SELECT * INTO #tmptble  from @regions  

    Select * from #tmptble


END

我正在使用以下方法來調用存儲過程:

 SqlParameter param = new SqlParameter();

            param.SqlDbType = SqlDbType.Structured;
            param.TypeName = "dbo.Regions";
            param.Value = myDataTable;
            param.ParameterName = "@regions";

return _context.Database.SqlQuery<RegionDetails>("GetStats", param);

我的數據表絕對是正確的格式,因為我已經通過探查器將其傳遞到存儲過程中,並且可以看到所有插入物出現了。 如果我從所有插入語句生成測試表,則該過程可以正常運行,但是當我使用傳入的數據表運行該表時,它僅不返回任何行。

編輯-有關更多信息,當我通過探查器運行此程序時,將得到以下信息:

declare @p3 dbo.Regions

~~~a Load of insert statements of all my datatable data~~~

exec sp_executesql N'GetStats',N'@regions [dbo].[Regions] READONLY',@regions =@p3

上面的更新我一直在分析探查器中顯示的內容,如果我替換

exec sp_executesql N'GetStats',N'@ regions [dbo]。[地區] READONLY',@ regions = @ p3

EXEC GetStats @ p3

再次有效。 有人知道為什么嗎?

試試這個方法:

//create parameter
var param = new SqlParameter("@regions", SqlDbType.Structured);   
param.Value = myDataTable;   
param.TypeName = "dbo.Regions";  

//return result set
return _context.ExecuteFunction<RegionDetails>("dbo.Regions", param);

//OR
//execute stored procedure for inserts, returns rows effective
return _context.Database.ExecuteSqlCommand("exec dbo.Regions @regions", param);

答案基於@SteveD的答案,但要弄清楚我所做的一切,以防其他人幫忙。 我的存儲過程沒有任何問題。 純粹是我的要求。 它需要在實際調用中使用參數名稱,如下所示:

SqlParameter param = new SqlParameter();

            param.SqlDbType = SqlDbType.Structured;
            param.TypeName = "dbo.Regions";
            param.Value = myDataTable;
            param.ParameterName = "@regions";

return _context.Database.SqlQuery<RegionDetails>("GetStats @regions", param);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM