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

2 个问题:

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

例如:

DECLARE @tblStudentDtl TABLE(
SrNo int IDENTITY not null,
sName varchar(50) ,
sAddress varchar(100),
ClassName varchar(100)
)
  1. 我是否能够插入、删除和更新虚拟 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/…
  • 1) 你试过了吗?您发布了代码,所以您是否尝试从对当前数据库没有写访问权限的用户执行该代码? 2) 您应该非常警惕从作者编造随机术语的文章中获取任何信息。这表明他们并不真正知道他们在说什么。可以考虑一下,因为英语显然不是作者的第一语言,但他说“使用 DECLARE 语句,不会在 tempdb 中创建临时表”,这不是真的。而且你最好不要在面试中使用“虚拟表”这个词;-)。
  • 对作者公平地说,要么是他对 Oracle/PL-SQL 的误解,甚至 Metalink 在某些文档中确实引用了“虚拟表”,要么是作者更习惯于使用 SQLite确实有一个虚拟表结构 (sqlite.org/vtab.html)

标签: sql sql-server table-variable


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多