什么是SQL“伪列”?

时间:2008-10-12 14:12:43

标签: sql-server tsql

我偶然编码SELECT $FOO..并收到错误“无效伪列”$ FOO“。

我找不到任何相关文档。这是我应该知道的吗?

编辑:这是一个特定于MS SQL Server的问题。

8 个答案:

答案 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