TSQL:表类型未作为临时表处理?

rea*_*Pro 0 t-sql sql-server

为什么表类型不被作为临时表处理?

是否可以在 exec 上下文中使用表类型?

此代码有效:

ALTER PROCEDURE [dbo].[bl]
    @bl type_bl READONLY  
AS
BEGIN
    SELECT * 
    INTO #table2 
    FROM @bl

    EXEC('SELECT * FROM #table2')
END
Run Code Online (Sandbox Code Playgroud)

为什么这段代码不起作用?

ALTER PROCEDURE [dbo].[bl]
    @bl type_bl READONLY  
AS
BEGIN
    EXEC('SELECT * FROM @bl')
END
Run Code Online (Sandbox Code Playgroud)

Rio*_*ams 5

由于您使用EXEC()它本质上执行动态 SQL,因此调用本身是从与其余代码不同的范围进行的,因此您的@bl变量不存在。

因此,您需要使用某种机制,例如临时表(如您的示例所示)来在EXEC()调用中访问它,尽管我建议避免使用动态 SQL,除非您有非常具体的原因使用它。