MS SqlServer 中的 Oracle“双”表相当于什么?

问题描述 投票:0回答:6

MS SqlServer 中的 Oracle“双”表相当于什么?

这是我的

Select
:

SELECT pCliente,
       'xxx.x.xxx.xx' AS Servidor,
       xxxx AS Extension,
       xxxx AS Grupo,
       xxxx AS Puerto
FROM DUAL;
sql sql-server oracle t-sql dual-table
6个回答
85
投票

在 SQL Server 中,没有

dual
。您可以简单地跳过
FROM
子句:

SELECT pCliente,
       'xxx.x.xxx.xx' AS Servidor,
        xxxx AS Extension,
        xxxx AS Grupo,
        xxxx AS Puerto

但是,如果您的问题是因为您从 Oracle 转移了一些引用

dual
的代码,您可以创建一个虚拟表:

CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)
GO
INSERT INTO DUAL (DUMMY)
VALUES ('X')
GO

37
投票

在 MSSQLserver 中不需要 DUAL

在甲骨文中

select 'sample' from dual

等于

SELECT 'sample'

在 SQL Server 中


6
投票

虽然您通常不需要 SQL Server 中的

DUAL
表,正如 Jean-François Savard 所解释的那样,但过去出于语法原因,我需要模拟
DUAL
。这里有三个选项:

创建
DUAL
表或视图

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

-- A view
CREATE VIEW DUAL AS SELECT 'X' AS DUMMY;

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

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

如果您只需要

DUAL
作为单个查询的范围,这也可以:

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

-- Derived table
SELECT *
FROM (
  SELECT 'X'
) DUAL(DUMMY)

2
投票

在 SQL Server 中没有双表。如果你想放置一个

WHERE
子句,你可以简单地直接这样放置:

SELECT 123 WHERE 1<2

我认为在 MySQL 和 Oracle 中,他们需要一个 FROM 子句来使用 WHERE 子句。

SELECT 123 FROM DUAL WHERE 1<2


1
投票

我想,当您需要根据局部变量连接一些表并从这些表中获取信息时,这可能会有一些帮助:

注意:局部变量必须是

Select  @XCode     as 'XCode '
       ,@XID       as 'XID   '  
       ,x.XName    as 'XName '
       ,@YCode     as 'YCode '
       ,@YID       as 'YID   '
       ,y.YName    as 'YName '
From (Select 1 as tst) t
Inner join Xtab x on x.XID = @XID
Inner join Ytab y on y.YID = @YID

0
投票

比这简单得多。 使用文字值建立数据类型。 如果列名称需要特殊字符,请在列名称周围加上引号。 如果您需要 1 行数据,请跳过 WHERE 子句:

SELECT  'XCode' AS XCode
       ,1 AS XID  
       ,'XName' AS "X Name"
       ,'YCode' AS YCode
       ,getDate() AS YID
       ,'YName' AS "Your Name"
 WHERE 1 = 0
© www.soinside.com 2019 - 2024. All rights reserved.