При работе над передачей типа таблицы вокруг меня возникает странная проблема, на которую я надеюсь, что-то простое, с чем я могу получить помощь. Мой тип таблицы выглядит следующим образом:Проблемы с типом таблицы в 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 Profiler показывает мне, что он генерирует следующее :
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());
И ргос:
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? –
хорошо покажите свой код, который вызывает хранимую процедуру, пожалуйста ... – MethodMan
Можете ли вы также показать код приложения? Определили ли вы тип команды как StoredProcedure? Sp_executesql заставляет меня поверить, что вы этого не сделали. –