我有这样的条件:
IF @aaa = 'high'
set @bbb = select * from table1
else
set @bbb = select * from table2
我将在整个存储过程中使用此变量(@bbb)
是否可以将表保存到变量中?
我尝试使用临时表但我无法分配两次。
IF @aaa = 'high'
set @bbb = select * into #temp from table1
else
set @bbb = select * into #temp from table2
它显示已经声明了#temp。
答案 0 :(得分:1)
不,这不是那样的工作。您可以声明一个表变量并插入其中。
DECLARE @bbbTable TABLE(
Id int NOT NULL,
SampleColumn varchar(50) NOT NULL
);
insert into @bbbTable (Id,SampleColumn)
select Id,SampleColumn from table1
如果table1和table2是完全不同的表,则应声明两个不同的表变量;
DECLARE @bbbTable TABLE(
Id int NOT NULL,
SampleColumn varchar(50) NOT NULL
);
DECLARE @aaaTable TABLE(
Id int NOT NULL,
SampleColumn varchar(50) NOT NULL
);
IF @aaa = 'high'
insert into @bbbTable (Id,SampleColumn)
select Id,SampleColumn from table1
else
insert into @aaaTable (Id,SampleColumn)
select Id,SampleColumn from table2
答案 1 :(得分:0)
您只能将1列/行存储到变量中。所以你不能说*。
假设我想将Table1中Column1的值存储到变量中,我可以使用此
SELECT @MyVariable = Column1 FROM TableA
但我不能说
SELECT @MyVariable = * FROM TableA
即使表格A中只有1列。
此外,如果Select条件返回的记录超过1条,则它会将First值分配给Variable。
或者您需要的是存储整个行,您可以使用临时表或表变量。
临时表
SELECT * INTO #Temp FROM TableA
表变量
DECLARE @MyVarTable TABLE
(
Column1 VARCHAR(50),
Column2 VARCHAR(50)
)
INSERT INTO @MyVarTable
(
Column1 ,
Column2
)
SELECT
Column1 ,
Column2
From MyTable
可以使用SELECT / UPDATE / DELETE查询访问普通表的方式访问此临时表和表变量。除了:
为每个会话创建临时表,并在会话结束或“查询”窗口关闭时自动删除
表变量仅在执行查询时存在。因此,在查询中使用表变量之前,您需要声明相同的
答案 2 :(得分:0)
您无法插入超过1个值的变量。 您可以使用表变量来达到这样的答案:
DELCARE @TableResult AS TABLE (Column1 INT, Column2 INT)
IF @aaa = 'high'
BEGIN
INSERT INTO @TableResult (Column1,Column2)
SELECT Column1FromTable, Column2FromTable
FROM table1
END
ELSE
BEGIN
INSERT INTO @TableResult (Column1,Column2)
SELECT Column1FromTable, Column2FromTable
FROM table2
END
当然,您可以声明超过2列。