MS SqlServer中Oracle"双"表的等价物是什么?

wab*_*goc 44 sql-server oracle dual-table

MS SqlServer中Oracle"双"表的等价物是什么?

这是我的Select:

SELECT pCliente,
       'xxx.x.xxx.xx' AS Servidor,
       xxxx AS Extension,
       xxxx AS Grupo,
       xxxx AS Puerto
FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

Jea*_*ard 56

sql-server,没有dual你可以简单地做

SELECT pCliente,
       'xxx.x.xxx.xx' AS Servidor,
        xxxx AS Extension,
        xxxx AS Grupo,
        xxxx AS Puerto
Run Code Online (Sandbox Code Playgroud)

但是,如果您的问题是因为您转移了一些代码Oracle,dual您可以从中重新创建表:

CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)
GO
INSERT INTO DUAL (DUMMY)
VALUES ('X')
GO
Run Code Online (Sandbox Code Playgroud)

  • 最好更改查询,而不是在SQL Server中引入`dual`表.Oracle的优化器将双表识别为特殊并跳过访问它,https://asktom.oracle.com/pls/asktom/f?p = 100:11:0 :: ::P11_QUESTION_ID:1562813956388#19020485993865 (3认同)
  • “ dual”最初是为某些内部用例创建的,在该用例中进行连接会重复行,但是在某些时候事情变得一发不可收拾,并且从中进行选择变得很普遍,因为Oracle愚蠢地需要一个“ FROM”子句,即使该值是选择不需要表格。 (2认同)

Ome*_*r K 20

您在mssql server中不需要DUAL

在oracle

select 'sample' from dual
Run Code Online (Sandbox Code Playgroud)

等于

SELECT 'sample'
Run Code Online (Sandbox Code Playgroud)

在sql server中

  • 在接受答案后的一年后,我认为没有理由再回答同样的问题。 (3认同)
  • 相同的答案但更清晰。话虽如此,我在没有 FROM 的情况下运行了两个示例,但出现了错误。 (3认同)

Luk*_*der 5

虽然您通常不需要DUALSQL Server 中的表,如Jean-François Savard所解释的那样,但我DUAL过去由于语法原因需要进行模拟。这里有三个选项:

创建DUAL表或视图

-- A table
SELECT 'X' AS DUMMY INTO DUAL;

-- A view
CREATE VIEW DUAL AS SELECT 'X' AS DUMMY;
Run Code Online (Sandbox Code Playgroud)

创建后,您可以像在 Oracle 中一样使用它。

使用公用表表达式或派生表

如果您只需要DUAL单个查询的范围,这也可以:

-- Common table expression
WITH DUAL(DUMMY) AS (SELECT 'X')
SELECT * FROM DUAL

-- Derived table
SELECT *
FROM (
  SELECT 'X'
) DUAL(DUMMY)
Run Code Online (Sandbox Code Playgroud)