我正在尝试从系统对象,同义词中选择值,然后存储到@variable
中。然后,我可以从@variable
中选择数据,而无需关心服务器。
但是,一直说我需要声明标量变量。有人可以帮忙吗?
DECLARE @variable NVARCHAR(100)
SELECT @variable = name
FROM sys.synonyms
WHERE base_object_name = '[ABC].[dbo].[tblABC]'
SELECT * FROM @variable
答案 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;
但是:同样在此查询中,服务器将“护理”。