【问题标题】:Create a Temporary Table in SQL Server with Read only access [closed]在具有只读访问权限的 SQL Server 中创建临时表 [关闭]
【发布时间】:2021-09-28 10:20:47
【问题描述】:

我目前正在编写一个 SQL 脚本。因为我根本不是专家,所以这可能会带我永远。 我对从中提取初始数据的数据库具有只读访问权限,但是我想创建一个#TempTable。 当我尝试这样做时,它似乎创建了它(至少我没有收到任何错误)但是当我尝试查看它的内容时,我收到一条错误消息,说我没有查看权限。

我似乎也无权访问 Drop Table - 我猜这也是由于只读状态。

所以我想知道有没有办法解决这个问题?我可以在我的 PC 上本地存储“temptable”吗?或者我还能做些什么吗?

提前致谢, 否

【问题讨论】:

  • 如果你CREATE一个临时表你应该拥有它的完全权限;如果您甚至无法 INSERT 进入它,我建议您需要与 DBA 交谈,因为人们当然应该能够使用他们拥有的临时对象来做​​到这一点。听起来有人弄乱了tempdb 中的权限,这通常是一个非常糟糕的主意。
  • 你能分享你创建/查看这个表的代码吗?
  • “因为表变量没有向 tempdb 写入任何内容” 这当然不是真的,@wenzzzel。如果表足够大,那么很可能会将信息写入临时数据库。
  • 这能回答你的问题吗? Temporary Table Scope?

标签: sql sql-server


【解决方案1】:

关闭连接时会自动删除临时表。如果您是在存储过程中或从 SSMS 执行此工作,那么这不会影响您,但如果您是从 .NET(或另一种编程语言)执行此操作并且您正在连接/断开连接,或者从一个脚本加载它并且尝试从报告中读取它(例如),然后不,该表对于创建它的会话/连接以外的任何会话/连接都将不可见或不存在。

如果您需要几分钟,并且您打算连接/断开连接(超过零次),您应该创建一个表。您可以在自己的架构下执行此操作,也可以选择一个听起来很临时的名称。

例如。如果我以 Domain\DataUser1 身份连接,我的架构是 [Domain\DataUser1]

SELECT UserName FROM LoggingTable
INTO TABLE [Domain\DataUser1].TempTable1
--I need those square brackets around my schema because of the \

这将在我的用户架构下创建一个表。我可以从另一个连接查询它

SELECT * FROM [Domain\DataUser1].TempTable1

哦。完成后不要忘记删除临时表:

DROP TABLE [Domain\DataUser1].TempTable1
-- or, if you intend to keep using it --
TRUNCATE TABLE [Domain\DataUser1].TempTable1

【讨论】:

  • 太完美了——这是为了帮助。
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多