我偶然编码SELECT $FOO..
并收到错误“无效伪列”$ FOO“。
我找不到任何相关文档。这是我应该知道的吗?
编辑:这是一个特定于MS SQL Server的问题。
答案 0 :(得分:4)
Pseudocolumns是实际列的符号别名,具有特殊属性,例如,$ IDENTITY是已分配IDENTITY的列的别名,$ ROWGUID是分配了ROWGUIDCOL的列。它用于内部管道脚本。
答案 1 :(得分:1)
我不知道为什么大多数答案都是Oracle特有的问题是关于SQL Server的!
与RobsonROX的答案一样,另一个使用它的例子是output
语句的merge
子句。 $action
表示是插入还是删除了行。
答案 2 :(得分:1)
伪列的行为类似于表列,但实际上并未存储在表中。您可以从伪列中进行选择,但不能插入,更新或删除它们的值。
答案 3 :(得分:0)
简单的Google搜索会从Oracle的参考资料中显示this:
伪列的行为类似于表格 列,但实际上并未存储 桌子。你可以选择 伪列,但你不能插入, 更新或删除它们的值。
我认为你得到的错误只是因为没有列$ FOO,所以查询解析器测试是否有一个名为$ FOO的伪列作为回退。由于没有名为“$ FOO”的伪列(并且没有其他后备),您会收到错误“无效伪列$ FOO”。不过这是猜测。在数据库方面,我不是专家。
答案 4 :(得分:0)
Pseudocolumns是在特殊情况下可用的虚拟列。在Oracle数据库中,有一个ROWNUM伪列,它将为您提供行号。据我所知,SQL服务器实际上并不支持伪列,但是存在引用伪列的错误和存储过程,可能用于Oracle迁移。
答案 5 :(得分:0)
伪列的一个示例是Informix中的ROWID。它是一个32位数字,可以比任何其他方式更快地查找数据页面(需要注意,例如表格没有碎片),因为它基本上是数据的页面地址。你可以做SELECT * FROM SomeTable
但它不会出现;您可以执行SELECT ROWID, * FROM SomeTable
,它会显示在您的数据中。因为它实际上并不存储在磁盘上(你不会在磁盘上看到带有数据的ROWID,尽管ROWID告诉你在磁盘上查找数据的位置),它是一个伪列。可能存在与表相关联的其他伪列 - 它们往往有点类似于深奥。
它们也可以被称为隐藏列,特别是如果它们(与伪列相反)实际存储在数据库中,但未被*
选中;你必须专门请求专栏才能看到它。
答案 6 :(得分:0)
伪列是假列。 任何表都支持伪列与它自己的列相同 严格来说它们是功能: 1.SYSDATE; 2.ROWNUM; 3.ROWID; 4.NEXTVAL; 5.CURRVAL; 6.LEVEL;
答案 7 :(得分:0)
假设我们有一个情况,两个表的列数不一样,需要应用UNION,那么一般我们会借助伪列来执行UNION操作。
从表 1 中选择 Col1、Col2、Col3、Col4、Col5 联盟 从表 2 中选择 Col1、Col2、Col3、Null 为 Col4、Null 为 Col5