Что эквивалентно "двойной" таблице Oracle в MS SqlServer?

Что эквивалентно "двойной" таблице Oracle в MS SqlServer?

Это мое Select:

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

6 ответов

Решение

В sql-server, здесь нет dual ты можешь просто сделать

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

Вы не нуждаетесь в ДВОЙНОМ сервере mssql

в оракуле

select 'sample' from dual

равно

SELECT 'sample'

в sql server

В то время как вам обычно не нужно DUAL таблицы в SQL Server, как объяснил Жан-Франсуа Савар, мне нужно было подражать 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)

В SQL Server нет двойной таблицы. Если вы хотите поставить WHERE Вы можете просто выразить это прямо так:

SELECT 123 WHERE 1<2

Я думаю, что в MySQL и Oracle им нужно предложение FROM для использования предложения WHERE.

SELECT 123 FROM DUAL WHERE 1<2

Я думаю, это может помочь, когда вам нужно присоединиться к некоторым таблицам на основе локальных переменных и получить информацию из этих таблиц:

Примечание. Локальные переменные должны быть

      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

Это намного проще. Используйте литеральные значения, чтобы установить типы данных. Поместите имена столбцов в кавычки, если им нужны специальные символы. Пропустите предложение WHERE, если вам нужна 1 строка данных:

      SELECT  'XCode' AS XCode
       ,1 AS XID  
       ,'XName' AS "X Name"
       ,'YCode' AS YCode
       ,getDate() AS YID
       ,'YName' AS "Your Name"
 WHERE 1 = 0
Другие вопросы по тегам