2

根据微软的定义,“全局临时表在创建后对任何用户和任何连接都是可见的,并在所有引用该表的用户与 SQL Server 实例断开连接时被删除。”

为什么以下工作:

使用 SSMS 创建全局临时表 (##SomeTempTableName),并在几秒或几分钟后使用 SSMS 运行单独的查询,第二个查询可以查看和使用临时表。

使用 ADO 创建一个全局临时表,并在几秒钟或几分钟后运行单独的 ADO 查询,第二个查询可以查看和使用临时表。

使用 Access 传递查询创建全局临时表,并在几秒或几分钟后运行单独的 Access 传递查询,第二个查询可以查看和使用临时表。

但是,如果我在 SSMS、ADO 或通过 Access 直通查询创建全局临时表,他们都看不到由任何其他方法创建的临时表吗?编辑:我刚刚使用 SSMS 可以看到的 Access 直通查询创建了一个临时表。

请注意,我没有关闭 SSMS、关闭 ADO 连接或关闭任何这些事件之间的访问。

4

1 回答 1

2

关于标题问题...

Access 传递查询能否查看使用 ADO 和/或 SSMS 创建的 SQL Server 上的全局临时表?

...我的测试表明答案是“是”。这是我所做的:

重新启动 SQL Server 机器后,我以管理员身份登录到 Windows,然后通过 SSMS(Windows 身份验证)在本地登录到 SQL Server。在 SSMS 中,我运行了脚本...

USE [Accounting]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE ##gord(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
 CONSTRAINT [PK_Products] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

...创建全局临时表,然后我运行脚本...

INSERT INTO ##gord ([Name]) VALUES ('bar')

...给它排。然后,在 SSMS 仍在运行的情况下,我启动了 Access 并运行了传递查询......

SELECT * FROM ##gord

...它从全局临时表中返回了该行。只要 SSMS 正在运行,我就可以继续运行直通查询,但是一旦我关闭 SSMS,下一次尝试运行 Access 直通查询就会导致

ODBC--调用失败

[Microsoft][ODBC SQL Server Driver][SQL Server]无效的对象名称“##gord”。(#208)

在 SSMS 和 Access 会话中,我以管理员身份(服务器角色:sysadmin)连接到 SQL Server,所以我想知道您是否可能有 SQL Server 权限问题,阻止其他会话看到全局临时表.

于 2013-09-22T02:12:00.110 回答