表值函数在SQL Server中;函数中的表是临时的吗?

时间:2016-07-06 14:35:32

标签: sql-server

对于SQL Server中的表值函数,当执行类似下面的操作时,它只创建临时表@Table,就像变量(在标量值函数中)一样,是否正确?如果要执行许多此类陈述,是否会出现任何问题?

CREATE FUNCTION some_function
     (@some_var varchar(20), @someDate date)
RETURNS @Table Table (id int, name varchar(50), DoB date)
AS
BEGIN
    INSERT INTO @Table
        SELECT id, Name, CAST(DoB as date) 
        FROM tblEmployees

    RETURN
END

1 个答案:

答案 0 :(得分:1)

  

如果要执行许多此类陈述,是否会出现任何问题?

不,那是not possible

  

局部变量的范围是声明它的批处理。

表变量的范围与标量变量的范围相同。

About table variable和临时表,简要说明:

  

表变量的范围仅限于特定批处理,而本地临时表仅限于特定的spid。

这意味着即使您从多个线程运行相同的代码 - 它们也不会与#表名冲突,因为每个线程都有自己的spid。不同的用户(不同的连接)不能在临时表名称上冲突,也不能在表变量名称(根本不可能)上冲突(不可能针对不同的连接)。

只能在同一连接中##(全局临时表)和#上发生冲突(例如,尝试创建具有相同名称的临时表的嵌套过程)。