Я набираю следующий код T-SQL в окне запроса sql:
-- Get the SUSER_SID standalone
SELECT SUSER_SID('sql_someuser') AS SUSER_SID_OF_SQL_SOMEUSER
-- Get the SUSER_SID as part of a more complex query (should be the same, right?)
SELECT UserSid, UserId FROM User..UserSidToUserId
UNION ALL
SELECT SUSER_SID('sql_someuser'),12345
Вот набор результатов, который я получаю:
первые две строки второго набора результатов выходят прямо из таблицы UserSidToUserId
.Но эта последняя строка, та с UserId
из 12345
, которая добавляется вторым запросом UNION ALL
, та, чья UserSid
генерируется при втором вызове SUSER_SID
с одно и то же имя пользователя отличается!
Обновление: Чтобы не было путаницы, вот определение таблицы UserSidToUserId
:
CREATE TABLE dbo.UserSidToUserId
(
UserSid uniqueidentifier NOT NULL,
UserId int NOT NULL,
)
Как два вызова с одним и тем же именем пользователя на SUSER_SID
могут давать результаты, которые зависят от контекста, в котором используется SUSER_SID
, если это абсолютный вызов, который не зависит от контекста?