Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL变量仅保留返回的最后一个结果_Sql Server_Variables_Stored Procedures - Fatal编程技术网

Sql server SQL变量仅保留返回的最后一个结果

Sql server SQL变量仅保留返回的最后一个结果,sql-server,variables,stored-procedures,Sql Server,Variables,Stored Procedures,下面的语句存储并打印最后返回的结果。如何存储这两个值 表名:UserGroupBranchMapping UserId username IsActive CountryName AccessType ----------- ------------------ -------- ------------- ------------ 140 demo1@demo1.com 1 SOUTH AFRICA 2 140

下面的语句存储并打印最后返回的结果。如何存储这两个值

表名:
UserGroupBranchMapping

UserId      username           IsActive CountryName    AccessType
----------- ------------------ -------- -------------  ------------
140         demo1@demo1.com    1        SOUTH AFRICA   2
140         demo1@demo1.com    1        BOTSWANA       1 
SQL语句:

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

SET @username = 'demo1@demo1.com,demo2@demo1.com';
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

正如Larnu所说,标量变量一次保存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'demo1@demo1.com', 1, N'SOUTH AFRICA', 2), (140, N'demo1@demo1.com', 1, N'BOTSWANA', 1)
以下
SELECT
语句将产生以下结果:

SELECT * 
FROM @UserGroupBranchMapping

UserId  username        isActive    CountryName   AccessType
------------------------------------------------------------
140     demo1@demo1.com    1        SOUTH AFRICA      2
140     demo1@demo1.com    1        BOTSWANA          1

请注意,表格变量的行为与标量变量类似,这意味着当它到达batch命令时,会丢失所有值。

使用临时表格或表格变量。标量变量只能保存标量(1)值。您是否有理由打印这些值,而不是简单地
SELECT
ing而不使用任何变量?@GeorgeMenoutis;是这样做的原因如果AccessType=1,则我将执行select语句以获取集团分支机构详细信息;如果AccessType=2,则我将执行另一个select语句以获取公司详细信息。谢谢您的建议。但是我如何执行这个场景呢。如果访问类型为1,则执行select语句以获取组分支详细信息,否则执行company details select语句。@Dipak-这是另一个主题。请为此提出一个新问题。如果我的建议有用,请接受。谢谢