在傳遞一個表類型的過程中,我遇到了一個奇怪的問題,我希望這是一個簡單的問題,我可以得到幫助。我的表型是這樣的: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]
這會給我:
現在,如果我從我的代碼運行的語句,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]
然而,當我運行它,我得到:
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]
你可以發佈SP的代碼嗎? – 2012-02-23 17:26:53
以及顯示你的代碼,調用存儲過程請... – MethodMan 2012-02-23 17:27:43
你也可以顯示應用程序代碼?您是否將命令類型定義爲StoredProcedure? sp_executesql讓我相信你沒有。 – 2012-02-23 17:32:06