Я пытаюсь адаптировать хранимую процедуру к представлению, и я столкнулся с проблемой, связанной с областью видимости таблицы в SQL Server 2008 R2.
В sproc был параметр, который указывалCompanyId.Теперь мы хотим получить те же данные, но не ограничивать их определенным идентификатором компании, а сгруппировать по этому идентификатору компании.
Однако моя попытка расширить его не удалась.
Select Distinct [T].[TruckID], [T].[VIN], [T].[Make], [T].[Model],
[T].[ModelYear], [T].[RFIDNo], [SQCT].[VendorCode], [SQCT].[UserLabel],
[T].[IsActive], [T].[IsFleetTruck], [SQDA].[DriverAssociations],
dbo.GetCurrentPlate([T].[TruckID]) [Plate],
[TCT].[CompanyId] -- // <- Now we're including it
From [dbo].[Truck] as [T]
Inner Join [dbo].[TruckerCompanyTruck] as [TCT]
On [T].[TruckID] = [TCT].[TruckId]
Left Outer Join (
Select [CT].[CompanyTruckId], [CT].[CompanyId],
[CT].[TruckId], [CT].[VendorCode], [CT].[UserLabel],
[CT].[CreateDate], [CT].[CreateBy], [CT].[UpdateDate],
[CT].[UpdateBy], [CT].[Version]
From [dbo].[CompanyTruck] as [CT]
) as [SQCT]
On [TCT].[CompanyId] = [SQCT].[CompanyId]
and [TCT].[TruckId] = [SQCT].[TruckId]
Left Join (
Select Distinct [TCTC].[TruckId], Count(*) [DriverAssociations]
From [TruckerCompanyTruck] [TCTC]
Inner Join [Trucker] [D]
On [TCTC].[TruckerId] = [D].[TruckerId]
Inner Join [TruckerContract] [TC]
On [TCTC].[TruckerId] = [TC].[TruckerId]
Where [TCTC].[CompanyId] = [TCT].[CompanyId] -- // Error!
and [TC].[CompanyId] = [TCT].[CompanyId] -- // Error!
Group By [TCTC].[TruckId]
) as [SQDA]
On [SQDA].[TruckId] = [T].[TruckId]
The "Ошибка!"Строки throw "Не удалось привязать идентификатор из нескольких частей" TCT.CompanyId ". *
Конечная цель состоит в том, что при выполнении этого запроса будет получено несколько строк для грузовика, который имеет несколько ассоциаций компании, и вернется правильный водительcount.
В конце этот запрос представления ...
Select *
From [FlattenedTruck]
Where [CompanyId] = 28
Order By [VIN]
... должен выдать тот же результат, что и этот.
Exec [GetTrucksForGridWithAssociationCounts] @companyId = 28
Ноотличаются.Sproc возвращает 1 ассоциацию водителей для companyId 28, а представление возвращает 1246 ассоциаций водителей, которые являются всеми ассоциациями для этого грузовика независимо от компании.(Это также отличается, потому что sproc не возвращает companyId, потому что он передается в качестве параметра.)
TruckID -> VIN -> Make -> Model -> ModelYear -> RFIDNo -> VendorCode -> UserLabel -> IsActive -> IsFleetTruck -> DriverAssociations -> Plate -> CompanyId
26 -> NULL -> NULL -> NULL -> NULL -> NULL -> NULL -> NULL -> 1 -> 0 -> 1246 -> US-WA-9D68812 28
26 -> NULL -> NULL -> NULL -> NULL -> NULL -> NULL -> NULL -> 1 -> 0 -> 1 -> US-WA-9D68812