Временные таблицы в хранимых процедурах

Я думаю, что groupby должен работать.

df.groupby(['A', 'B']).max()['C']

Если вам нужна обратная передача данных, вы можете связать вызов индекса сброса.

df.groupby(['A', 'B']).max()['C'].reset_index()
30
задан Andomar 13 May 2009 в 13:02
поделиться

5 ответов

Нет. Независимые экземпляры временной таблицы будут созданы для каждого подключения.

31
ответ дан 27 November 2019 в 23:45
поделиться

Возможно.

Временные таблицы с префиксом # (#example) хранятся для каждого сеанса. Поэтому, если ваш код снова вызывает хранимую процедуру во время выполнения другого вызова (например, фоновых потоков), тогда вызов create завершится ошибкой, потому что он уже существует.

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

DECLARE @MyTempTable TABLE 
(
   someField int,
   someFieldMore nvarchar(50)
)

Это будет быть конкретным для «экземпляра» этого вызова хранимой процедуры.

22
ответ дан 27 November 2019 в 23:45
поделиться

The database uses the same lock for all #temp tables so if you are using a lot you will get deadlock problems. It is better to use @ table variables for concurrency.

-1
ответ дан 27 November 2019 в 23:45
поделиться

Не совсем, я говорю о SQL Server. Временная таблица (с одним #) существует и видна в пределах созданной области (привязанной к области видимости). Каждый раз, когда вы вызываете свою хранимую процедуру, она создает новую область, поэтому временная таблица существует только в этой области. Я считаю, что временные таблицы также видны хранимым процедурам и udf, которые также вызываются в этой области. Однако, если вы используете двойной фунт (##), они становятся глобальными в вашем сеансе и, следовательно, становятся видимыми для других выполняющихся процессов как часть сеанса, в котором создается временная таблица, и вам придется подумать, есть ли возможность доступа к временной таблице одновременно желательно или нет.

7
ответ дан 27 November 2019 в 23:45
поделиться

Use @temp tables whenever possible--that is, you only need one primary key and you do not need to access the data from a subordinate stored proc.

Use #temp tables if you need to access the data from a subordinate stored proc (it is an evil global variable to the stored proc call chain) and you have no other clean way to pass the data between stored procs. Also use it if you need a secondary index (although, really ask yourself if it is a #temp table if you need more than one index)

If you do this, always declare your #temp table at the top of the function. SQL will force a recompile of your stored proc when it sees the create table statement....so if you have the #temp table declaration in the middle of the stored proc, you stored proc must stop processing and recompile.

-2
ответ дан 27 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

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