Несмотря на то, что он несколько хакерский, создающий подклассы UITabBar
и переопределяющий метод - (void)addSubview:
, мы можем предотвратить добавление разделителя линий роста в иерархию представлений:
- (void)addSubview:(UIView *)view {
if ([view isKindOfClass:[UIImageView class]] && view.bounds.size.height < 2.0f) {
return;
}
[super addSubview:view];
}
Таким образом, мы получим оба размытую панель вкладок и удалите разделитель волосяного покрова. Это также гарантирует, что UITabBar
не будет обрезать изображения до границ, что важно для таких эффектов, как большие центральные кнопки или другие компоненты пользовательского интерфейса.
Мне действительно нравится предыдущий ответ (не используйте SP), но если вы по какой-то причине привязаны к самому SP , вы можете использовать его для заполнения временной таблицы, а затем присоединиться к временной таблице. Обратите внимание, что вы собираетесь потратиться на это несколько дополнительных накладных расходов, но это единственный способ, который я могу придумать, чтобы использовать фактическую сохраненную процедуру.
Опять же,
Вместо этого вашу хранимую процедуру можно легко использовать как представление. Затем вы можете присоединить его ко всему, что вам нужно.
SQL:
CREATE VIEW vwTenantBalance
AS
SELECT tenant.ID AS TenantID, SUM(ISNULL(trans.Amount,0)) AS TenantBalance
FROM tblTenant tenant
LEFT JOIN tblTransaction trans
ON tenant.ID = trans.TenantID
GROUP BY tenant.ID
Вы можете выполнить любой оператор, например:
SELECT t.TenantName, t.CarPlateNumber, t.CarColor, t.Sex, t.SSNO, t.Phone,
t.Memo, u.UnitNumber, p.PropertyName, TenantBalance
FROM tblTenant t
LEFT JOIN tblRentalUnit u
ON t.UnitID = u.ID
LEFT JOIN tblProperty p
ON u.PropertyID = p.ID
LEFT JOIN vwTenantBalance v
ON t.ID = v.tenantID
ORDER BY p.PropertyName, t.CarPlateNumber
вставьте результат SP во временную таблицу, затем присоединитесь:
CREATE TABLE #Temp (
TenantID int,
TenantBalance int
)
INSERT INTO #Temp
EXEC TheStoredProc
SELECT t.TenantName, t.CarPlateNumber, t.CarColor, t.Sex, t.SSNO, t.Phone, t.Memo,
u.UnitNumber, p.PropertyName
FROM tblTenant t
INNER JOIN #Temp ON t.TenantID = #Temp.TenantID
...
Короткий ответ - «вы не можете». Вам нужно либо использовать подзапрос, либо преобразовать существующую хранимую процедуру в табличную функцию. Создание его как функции будет зависеть от того, насколько «многоразовым» он должен быть.
Надеюсь, ваша хранимая процедура не выполняет цикл курсора!
Если нет, возьмите запрос из своей хранимой процедуры и интегрируйте этот запрос в запрос, который вы публикуете здесь:
SELECT t.TenantName, t.CarPlateNumber, t.CarColor, t.Sex, t.SSNO, t.Phone, t.Memo,
u.UnitNumber,
p.PropertyName
,dt.TenantBalance
FROM tblTenant t
LEFT JOIN tblRentalUnit u ON t.UnitID = u.ID
LEFT JOIN tblProperty p ON u.PropertyID = p.ID
LEFT JOIN (SELECT ID, SUM(ISNULL(trans.Amount,0)) AS TenantBalance
FROM tblTransaction
GROUP BY tenant.ID
) dt ON t.ID=dt.ID
ORDER BY p.PropertyName, t.CarPlateNumber
Если вы делаете что-то большее, чем запрос в своей хранимой процедуре, создайте временную таблицу и выполните хранимую процедуру в этой временной таблице, а затем присоединитесь к ней в своем запросе.
create procedure test_proc
as
select 1 as x, 2 as y
union select 3,4
union select 5,6
union select 7,8
union select 9,10
return 0
go
create table #testing
(
value1 int
,value2 int
)
INSERT INTO #testing
exec test_proc
select
*
FROM #testing
Почему не просто выполнять вычисления в вашем SQL?
SELECT
t.TenantName
, t.CarPlateNumber
, t.CarColor
, t.Sex
, t.SSNO
, t.Phone
, t.Memo
, u.UnitNumber
, p.PropertyName
, trans.TenantBalance
FROM tblTenant t
LEFT JOIN tblRentalUnit u ON t.UnitID = u.ID
LEFT JOIN tblProperty p ON u.PropertyID = p.ID
INNER JOIN (
SELECT tenant.ID AS TenantID, SUM(ISNULL(trans.Amount,0)) AS TenantBalance
FROM tblTenant tenant
LEFT JOIN tblTransaction trans ON tenant.ID = trans.TenantID
GROUP BY tenant.ID
) trans ON trans.ID = t.ID
ORDER BY
p.PropertyName
, t.CarPlateNumber
Я решил эту проблему, написав функцию вместо процедуры и используя CROSS APPLY в операторе SQL. Это решение работает с SQL 2005 и более поздними версиями.
Гедиминас Букаускас