Я работаю над хранимой процедурой, которая получает objectGUID из активного каталога. Я сохраняю результат во временной таблице, а затем возвращаю значение в выходном параметре для использования с другими процессами. SP будет вызываться из разных хранимых процедур, а также из веб-приложений PHP, ASP Classic и ASP.Net.
Я читал ЗДЕСЬ, что (относительно временных таблиц):
Если они созданы внутри хранимой процедуры, они уничтожаются по завершении хранимой процедуры. Кроме того, областью действия любой конкретной временной таблицы является сеанс, в котором она создается; это означает, что он виден только текущему пользователю. Несколько пользователей могут создать временную таблицу с именем #TableX, и любые одновременные запросы не будут влиять друг на друга - они будут оставаться автономными транзакциями, а таблицы будут оставаться автономными объектами. Вы можете заметить, что мое имя временной таблицы начиналось со знака «#».
Похоже, я в порядке, но я хотел получить совет, чтобы убедиться, что нет никаких ошибок, о которых я не знаю. Вот ИП.
Заранее спасибо.
CREATE PROCEDURE stp_adlookup
@user varchar(100),
@objectGUID varbinary(256) OUTPUT
AS
SET NOCOUNT ON;
DECLARE @qry char(1000)
CREATE TABLE #tmp(
objectGUID nvarchar(256)
)
SET @qry = 'SELECT *
FROM openquery(ADSI, ''
SELECT objectGUID
FROM ''''LDAP://mydomaincontroller.com''''
WHERE sAMAccountName = ''''' + @user + '''''
'')'
INSERT INTO #tmp
EXEC(@qry)
SELECT @objectGUID=CAST(objectGUID as varbinary(256)) FROM #tmp;
DROP TABLE #tmp
SET NOCOUNT OFF;
GO
источник
в широком смысле, вам будет хорошо, если вы будете так делать. Хранимые процедуры имеют ограниченную область действия, поэтому, хотя (пример) 3 пользователя выполняют одну и ту же хранимую процедуру, и временные таблицы не будут смешиваться, они даже не будут видеть друг друга.
До тех пор, пока вам не нужно делиться результатами с другим сеансом или пользователем, выполняющим другой процесс, временная таблица может быть совершенно разумным способом.
источник