将SELECT语句中的值存储到SQL Server上的变量中

时间:2018-10-26 22:50:16

标签: sql sql-server tsql

我正在尝试从系统对象,同义词中选择值,然后存储到@variable中。然后,我可以从@variable中选择数据,而无需关心服务器。 但是,一直说我需要声明标量变量。有人可以帮忙吗?

DECLARE @variable NVARCHAR(100)

SELECT @variable = name 
FROM sys.synonyms 
WHERE base_object_name = '[ABC].[dbo].[tblABC]'

SELECT * FROM @variable

3 个答案:

答案 0 :(得分:0)

问题是您只需要向变量返回一个值。通过这种方式:

Declare @variable nvarchar(100)

@variable = (SELECT TOP(1) name -- getting only one registry
    FROM  sys.synonyms where base_object_name = 
    '[ABC].[dbo].[tblABC]')

select @variable

答案 1 :(得分:0)

您必须下一步:

declare @names table ( name nvarchar(100 ) );

insert @names(name)
select name 
FROM sys.synonyms 
where base_object_name = '[ABC].[dbo].[tblABC]'; 

select * from @names

答案 2 :(得分:0)

您的查询将选择所有名称,并将它们连续存储在变量中,这意味着每个名称都会覆盖以前存储的名称,因此,当SELECT语句终止时,变量中只有最后选择的名称可用。如果您想要一个可以像临时表一样查询的变量,则必须声明一个表变量,然后将名称插入该“表”中,然后您可以对该变量运行select语句:

Declare @variable table (name nvarchar(128));

INSERT INTO @variable (name)
SELECT name 
FROM  sys.synonyms 
where base_object_name = '[ABC].[dbo].[tblABC]';

select * from @variable;

但是:同样在此查询中,服务器将“护理”。