如何将select语句的结果存储到sql server存储过程中的变量中

时间:2017-12-26 11:17:30

标签: sql-server

我有这样的条件:

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。

3 个答案:

答案 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列。