对于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
答案 0 :(得分:1)
如果要执行许多此类陈述,是否会出现任何问题?
不,那是not possible:
局部变量的范围是声明它的批处理。
表变量的范围与标量变量的范围相同。
About table variable和临时表,简要说明:
表变量的范围仅限于特定批处理,而本地临时表仅限于特定的spid。
这意味着即使您从多个线程运行相同的代码 - 它们也不会与#
表名冲突,因为每个线程都有自己的spid
。不同的用户(不同的连接)不能在临时表名称上冲突,也不能在表变量名称(根本不可能)上冲突(不可能针对不同的连接)。
只能在同一连接中##
(全局临时表)和#
上发生冲突(例如,尝试创建具有相同名称的临时表的嵌套过程)。