Переменная SQL содержит только последний возвращенный результат

Ниже оператор сохраняет и печатает последний возвращенный результат. Как я могу сохранить оба значения?

Название стола: UserGroupBranchMapping

UserId      username           IsActive CountryName    AccessType
----------- ------------------ -------- -------------  ------------
140         [email protected]    1        SOUTH AFRICA   2
140         [email protected]    1        BOTSWANA       1 

Оператор SQL:

DECLARE @AccessType VARCHAR(100);
DECLARE @username NVARCHAR(MAX);
DECLARE @countryName NVARCHAR(MAX);
DECLARE @countryId VARCHAR(100);

SET @username = '[email protected],[email protected]';
SET @countryName = 'SOUTH AFRICA,BOTSWANA';

SELECT @AccessType = ugbm.AccessType, @countryId = ugbm.Countryid
FROM UserGroupBranchMapping ugbm
INNER JOIN Users usr ON usr.id = ugbm.UserId
INNER JOIN Country con ON con.id = ugbm.countryid
WHERE usr.UserName IN (SELECT item
                       FROM dbo.SplitString(@username, ','))
  AND con.countryName IN (SELECT item
                          FROM dbo.SplitString(@countryName, ','))
  AND ugbm.IsActive = 1;

PRINT @AccessType, @countryId

Используйте временную таблицу или табличную переменную. переменная скаляр может содержать только значение скаляр (1).

Larnu 17.03.2019 14:19

Есть ли причина, по которой вы хотите НАПЕЧАТАТЬ значения, а не просто SELECT их без использования каких-либо переменных?

George Menoutis 17.03.2019 14:58

@ДжорджМеноутис; да, причина делать IF AccessType = 1, тогда я выполняю оператор select для сведений о филиале группы, и если AccessType равен 2, то я выполняю другой оператор select, чтобы получить данные о компании.

Dipak 17.03.2019 17:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как уже сказал Ларну, скалярная переменная может содержать 1 (одно) значение за раз. Когда выполнение запроса достигает конца пакетной команды (скорее всего, вы используете команду по умолчанию, которая равна GO), переменная автоматически уничтожается, что означает, что она теряет значение, хранившееся до этого момента.

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

Вы можете использовать что-то вроде этого:

DECLARE @UserGroupBranchMapping TABLE(
UserId int,
username nvarchar(200),
isActive bit,
CountryName nvarchar(200),
AccessType int
)


INSERT INTO @UserGroupBranchMapping (UserId, username, isActive, CountryName, AccessType)
VALUES(140, N'[email protected]', 1, N'SOUTH AFRICA', 2), (140, N'[email protected]', 1, N'BOTSWANA', 1)

Следующий оператор SELECT даст следующий результат:

SELECT * 
FROM @UserGroupBranchMapping

UserId  username        isActive    CountryName   AccessType
------------------------------------------------------------
140     [email protected]    1        SOUTH AFRICA      2
140     [email protected]    1        BOTSWANA          1

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

Спасибо за ваше предложение. Но как я могу выполнить сценарий. Если тип доступа равен 1, выполните оператор выбора, чтобы получить сведения о филиале группы, в противном случае выполните оператор выбора сведений о компании.

Dipak 18.03.2019 03:57

@Dipak - это другая тема. Пожалуйста, задайте новый вопрос для этого. Если мое предложение помогло, пожалуйста, примите его. Спасибо!

cdrrr 18.03.2019 08:31

Другие вопросы по теме