具有只读访问权限的 Sql 虚拟表:插入、删除、更新?

Posted

技术标签:

【中文标题】具有只读访问权限的 Sql 虚拟表:插入、删除、更新?【英文标题】:Sql Virtual Table with Read Only Access: insert, delete , update? 【发布时间】:2015-01-13 03:23:44 【问题描述】:

2 个问题:

    我能否使用对数据库具有只读访问权限的用户创建虚拟表?

例如:

DECLARE @tblStudentDtl TABLE(
SrNo int IDENTITY not null,
sName varchar(50) ,
sAddress varchar(100),
ClassName varchar(100)
)
    我是否能够插入、删除和更新虚拟 sql 表中的数据,该表是使用对数据库具有只读访问权限的用户创建的?

例如:

DECLARE @tblStudentDtl TABLE(
    SrNo int IDENTITY not null,
    sName varchar(50) ,
    sAddress varchar(100),
    ClassName varchar(100)
    )

    INSERT INTO @tblStudentDtl (sName,sAddress,ClassName)
    SELECT sName, sAddress,ClassName FROM tblStudent A JOIN tblClass B ON A.ClassId=B.ClassId WHERE sName like +‘s%’ ORDER BY sName

    SELECT * FROM @tblStudentDtl

【问题讨论】:

我从未听说过所谓的虚拟表。它是一个表值变量或表变量。 虚拟表无处不在:例如tipsntracks.com/311/… 并非无处不在:social.technet.microsoft.com/Search/… 1) 你试过了吗?您发布了代码,所以您是否尝试从对当前数据库没有写访问权限的用户执行该代码? 2) 您应该非常警惕从作者编造随机术语的文章中获取任何信息。这表明他们并不真正知道他们在说什么。可以考虑一下,因为英语显然不是作者的第一语言,但他说“使用 DECLARE 语句,不会在 tempdb 中创建临时表”,这不是真的。而且你最好不要在面试中使用“虚拟表”这个词;-)。 对作者公平地说,要么是他对 Oracle/PL-SQL 的误解,甚至 Metalink 在某些文档中确实引用了“虚拟表”,要么是作者更习惯于使用 SQLite确实有一个虚拟表结构 (sqlite.org/vtab.html) 【参考方案1】:

这些“虚拟表”只是表变量,与在 T-SQL 中声明变量没有太大区别。您不需要任何特殊权限。表数据甚至不存储在您连接的数据库中 - 它存储在 tempdb 中,与临时表相同。

关于表数据类型的 MSDN Docs:http://msdn.microsoft.com/en-us/library/ms175010.aspx

【讨论】:

以上是关于具有只读访问权限的 Sql 虚拟表:插入、删除、更新?的主要内容,如果未能解决你的问题,请参考以下文章

如何授予 Redshift 中所有模式的使用权限?

数据库视图性能问题

多个线程可以具有只读访问权限的互斥模式

MS Access 表单只读

我如何配置一个用户具有只读访问权限,而另一用户具有对Hangfire仪表板的完全访问权限?

将 BigQuery 表切换为“只读模式”