Как я могу присоединиться на хранимой процедуре?

Несмотря на то, что он несколько хакерский, создающий подклассы UITabBar и переопределяющий метод - (void)addSubview:, мы можем предотвратить добавление разделителя линий роста в иерархию представлений:

- (void)addSubview:(UIView *)view {
    if ([view isKindOfClass:[UIImageView class]] && view.bounds.size.height < 2.0f) {
        return;
    }
    [super addSubview:view]; 
}

Таким образом, мы получим оба размытую панель вкладок и удалите разделитель волосяного покрова. Это также гарантирует, что UITabBar не будет обрезать изображения до границ, что важно для таких эффектов, как большие центральные кнопки или другие компоненты пользовательского интерфейса.

45
задан Pesto 28 May 2009 в 15:48
поделиться

7 ответов

Мне действительно нравится предыдущий ответ (не используйте SP), но если вы по какой-то причине привязаны к самому SP , вы можете использовать его для заполнения временной таблицы, а затем присоединиться к временной таблице. Обратите внимание, что вы собираетесь потратиться на это несколько дополнительных накладных расходов, но это единственный способ, который я могу придумать, чтобы использовать фактическую сохраненную процедуру.

Опять же,

25
ответ дан 26 November 2019 в 21:02
поделиться

Вместо этого вашу хранимую процедуру можно легко использовать как представление. Затем вы можете присоединить его ко всему, что вам нужно.

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
9
ответ дан 26 November 2019 в 21:02
поделиться

вставьте результат 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
...
45
ответ дан 26 November 2019 в 21:02
поделиться

Короткий ответ - «вы не можете». Вам нужно либо использовать подзапрос, либо преобразовать существующую хранимую процедуру в табличную функцию. Создание его как функции будет зависеть от того, насколько «многоразовым» он должен быть.

18
ответ дан 26 November 2019 в 21:02
поделиться

Надеюсь, ваша хранимая процедура не выполняет цикл курсора!

Если нет, возьмите запрос из своей хранимой процедуры и интегрируйте этот запрос в запрос, который вы публикуете здесь:

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
2
ответ дан 26 November 2019 в 21:02
поделиться

Почему не просто выполнять вычисления в вашем 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
0
ответ дан 26 November 2019 в 21:02
поделиться

Я решил эту проблему, написав функцию вместо процедуры и используя CROSS APPLY в операторе SQL. Это решение работает с SQL 2005 и более поздними версиями.

Гедиминас Букаускас

6
ответ дан 26 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: