是否可以在不定义模式的情况下插入表变量?

时间:2009-10-09 09:46:35

标签: sql sql-server-2005

是否可以在不定义架构的情况下插入表变量?

我需要这样做

Declare @tab1 as table

Insert into @tab1 select * from table2

Select * from @tab1

我正在尝试此查询,但收到错误。

请帮忙。

3 个答案:

答案 0 :(得分:3)

错误在于这一行:

将@ tab1声明为表

  

'table'附近的语法不正确。

但你的插入也犯了错误:

select * into tab1
from table2

据我所知,你需要在使用表变量时声明模式,如果你使用临时表,那么你就不会这样做

select * into #tab1
from table2

请参阅msdn

答案 1 :(得分:1)

错误在第一行

Msg 102,Level 15,State 1,Line 1 'table'附近的语法不正确。

而不是声明@ tab1作为表格尝试

  

将@ tab1声明为表格(col1   varchar(100))即全表模式

e.g。

  

将@ tab1声明为表格(col1   VARCHAR(100))

     

插入@ tab1选择[人名]   来自tblInformation

     

从@ tab1

中选择*

输出:

  

<强> COL1

     

XYZ
  ABC

答案 2 :(得分:0)

这将有效:

declare @tab table (BillID int)
insert into @tab
select top 10 BillID from tblBill
select * from @tab

这不起作用:

select top 10 BillID into @tab from tblBill
select * from @tab

如果要动态定义表var的模式,可以使用以下内容:

declare @str varchar(1000)
set @str = 'declare @tab table (BillID int) ' + 
'insert into @tab ' + 'select top 10 BillID from tblBill ' + 'select * from @tab '
exec(@str)

另外,在Pinal Dave的网站上查找(sp_executesql)以获得一些好的建议