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