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-这是另一个主题。请为此提出一个新问题。如果我的建议有用,请接受。谢谢