2012-02-23 21 views
2

テーブル型を渡す作業で、私は奇妙な問題にぶち当たっています。私のテーブルのタイプは次のようになります:SQL Server 2008でのテーブル型の問題

CREATE TYPE [dbo].[StoreTableType] AS TABLE(
[StoreGUID] [uniqueidentifier] NULL 
) 

私はこれを渡して、マーケットでいくつかの合計を表示するためのクエリを持つグループを含んでいます。しかしここで興味深いのは... SQLEMでクエリを実行すると動作しますが、ストアドプロシージャを呼び出すと何も返されません。ここでは、私は結果を得るために実行するものです:

declare @p3 dbo.StoreTableType 
insert into @p3 values('121A267F-F994-4B01-8318-9E307AF9415B') 
insert into @p3 values('B2BB61CE-5ED8-4C91-ADB7-DA903B6D506A') 
insert into @p3 values('5818BA65-A1B5-432E-BF76-68EF51635A39') 

select * from survey where storeguid in (select StoreGUID from @p3) 

select m.[Name] as Market, count(svy.SurveyGUID) as Total 
from survey svy inner join store s on svy.StoreGUID = s.StoreGUID 
inner join Market m on s.MarketID = m.MarketID 
where s.StoreGUID in (select StoreGUID from @p3) 
group by m.[Name] 

これは私を与える:私は私のコードからのステートメントを実行した場合

enter image description here

を今、SQLプロファイラは、それは次のように生成していることを私に示して:私はこれを実行すると

declare @p3 dbo.StoreTableType 
insert into @p3 values('121A267F-F994-4B01-8318-9E307AF9415B') 
insert into @p3 values('B2BB61CE-5ED8-4C91-ADB7-DA903B6D506A') 
insert into @p3 values('5818BA65-A1B5-432E-BF76-68EF51635A39') 

exec sp_executesql N'snus_MarketTotals',N'@StoreGUIDs [StoreTableType]  READONLY',@[email protected] 

はしかし、私が取得:

enter image description here

procでのクエリによるグループは、SQLEMでテストしたものと同じです。誰にでもアイデアはありますか?私はテーブルタイプで救済する準備ができています...しかし、私は何かを見落としているかどうかを見たいと思っていました。

更新:ここでコードを呼び出します。

 // EF <hates> table type parameters... so... gonna put some SQL in here. 
     SqlConnection conn = new SqlConnection(connectionString); 
     DataSet ds = new DataSet(datasetName); 

     using (SqlCommand cmd = new SqlCommand(spName, conn)) 
     { 
      SqlParameter param = new SqlParameter("@StoreGUIDs", SqlDbType.Structured); 
      param.Value = storeGuids; 
      param.TypeName = "StoreTableType"; 
      cmd.Parameters.Add(param); 

      SqlDataAdapter adapter = new SqlDataAdapter(cmd); 
      adapter.Fill(ds); 

     } 

     // get some xml 
     return(ds.GetXml()); 

そしてPROC用:

CREATE PROCEDURE [dbo].[MarketTotals] 
(
    @StoreGUIDs StoreTableType readonly 
) 
AS 
begin 

-- market totals 
select m.[Name] as Market, count(svy.SurveyGUID) as Total 
from survey svy inner join store s on svy.StoreGUID = s.StoreGUID 
    inner join Market m on s.MarketID = m.MarketID 
where s.StoreGUID in (select StoreGUID from @StoreGUIDs) 
group by m.[Name] 
+0

SPのコードを掲載することはできますか? –

+0

ストアドプロシージャを呼び出すコードを表示してください。 – MethodMan

+1

アプリケーションコードも表示できますか?コマンドタイプをStoredProcedureとして定義しましたか? sp_executesqlは、あなたが持っていないと信じてくれます。 –

答えて

1

私はあなたがStoredProcedure以外のものとしてあなたCommandTypeを宣言したので、あなたがsp_executesqlを取得していると思われます。あなたがProfilerで見ていることは正しいとは思わない。

+0

最後の2セントについては、明示的に設定しなかったので、デフォルトの 'CommandType'は' Text'でした。この場合、 'sp_executesql'が使われました。サイドバーはなぜ 'sp_executesql'が' StoreTableType'に不満を持ち、無視するだけなのでしょうか?しかし、ありがたいことに私は生産性を維持するための答えは必要ありません。 :-) –

+0

いくつかのレイヤーにバグのようです。私は 'sp_executesql'がデータを何とか正しく渡してくれないという点を除いて、より良い答えがありません。私はこれのためのreproを仕上げて、バグを提出しようとします。誤った 'CommandType'がデータが正しく渡されないことを意味するならば、無音ではなく例外が存在するはずです。 –

関連する問題