Sql server 2008 在SQLServer2008视图中处理临时表

Sql server 2008 在SQLServer2008视图中处理临时表,sql-server-2008,view,temp-tables,Sql Server 2008,View,Temp Tables,我用这种格式写了一个查询 Select * INTO #xyz FROM () 稍后我想用它创建一个视图,如 CREATE VIEW aaa AS Select * INTO #xyz FROM () 但会出现以下错误: 关键字“INTO”附近的语法不正确 临时表上不允许使用视图或函数 有人能建议解决这个问题吗?可以使用临时表来创建视图吗?正如错误消息所说,不能使用临时表 您应该使用也可以在视图中指定的永久表或CTE CTE可以根据您的情况为您提供帮助。在研究什么是CTE后,如果您认

我用这种格式写了一个查询

Select * INTO #xyz FROM ()
稍后我想用它创建一个视图,如

CREATE VIEW aaa
AS 
   Select * INTO #xyz FROM ()
但会出现以下错误:

  • 关键字“INTO”附近的语法不正确
  • 临时表上不允许使用视图或函数

  • 有人能建议解决这个问题吗?可以使用临时表来创建视图吗?

    正如错误消息所说,不能使用临时表

    您应该使用也可以在视图中指定的永久表或CTE

    CTE可以根据您的情况为您提供帮助。在研究什么是CTE后,如果您认为合适,请用一些上下文描述您的问题。简言之,CTE是一个查询,您可以多次引用它,而在过去人们使用临时表进行查询


    正如错误消息所说,不可能使用临时表

    您应该使用也可以在视图中指定的永久表或CTE

    CTE可以根据您的情况为您提供帮助。在研究什么是CTE后,如果您认为合适,请用一些上下文描述您的问题。简言之,CTE是一个查询,您可以多次引用它,而在过去人们使用临时表进行查询


    您当然不能在视图中使用选择进入。termp表也不合适。改用与临时表等效的派生表。例如:

    假设你有:

    select t1.id, t2.field1 into #temp from table1 t1
    join Table2 t2 on t1.id = t2.id
    where t2.somefield2 = 'mytest'
    
    select t1.id, t2.field1, t1.field1
    from mytable2 t1
    join #Temp t2 on t1.id = t2.id
    where t2.somefield = 'test'
    
    然后你可以使用:

    select t1.id, t2.field1, t1.field1
    from mytable2 t1
    join (select t1.id, t2.field1 
            from table1 t1
            join Table2 t2 on t1.id = t2.id
            where t2.somefield2 = 'mytest') t2 
        on t1.id = t2.id
    where t2.somefield = 'test'
    

    您还可以使用CTE

    您当然不能在视图中使用select into。termp表也不合适。改用与临时表等效的派生表。例如:

    假设你有:

    select t1.id, t2.field1 into #temp from table1 t1
    join Table2 t2 on t1.id = t2.id
    where t2.somefield2 = 'mytest'
    
    select t1.id, t2.field1, t1.field1
    from mytable2 t1
    join #Temp t2 on t1.id = t2.id
    where t2.somefield = 'test'
    
    然后你可以使用:

    select t1.id, t2.field1, t1.field1
    from mytable2 t1
    join (select t1.id, t2.field1 
            from table1 t1
            join Table2 t2 on t1.id = t2.id
            where t2.somefield2 = 'mytest') t2 
        on t1.id = t2.id
    where t2.somefield = 'test'
    

    您也可以使用CTE

    您的最终目标是什么?你想用那个临时表做什么?你不能。视图是单语句活动。您可以使用“CTE”帮助保持代码可读性。您的最终目标是什么?你想用那个临时表做什么?你不能。视图是单语句活动。您可以使用“CTE”来帮助保持代码可读性。很感谢您提到派生表。SQL是非常可组合的,这是一种乐趣。谢谢,我将尝试这个。很高兴你提到派生表。SQL是非常可组合的,这是一种乐趣。谢谢,我要试试这个。