Uma dúvida comum de quem está migrando do Oracle para o SQL Server é querer saber qual tabela representa a “DUAL” do Oracle no SQL Server.
Nota: A tabela DUAL do Oracle é uma tabela também conhecida como “dummy”, ou seja, uma tabela bobinha, ou, em uma tradução livre do inglês, tabela estúpida, utilizada apenas para poder informá-la na cláusula FROM.
Resposta simples: Não existe a tabela DUAL e nem nenhuma tabela equivalente no SQL Server!
“Poxa, e agora?”
Calma! Na verdade você pode fazer um SELECT no SQL Server sem informar nada na cláusula FROM.
Vejamos um exemplo:
Para obter a data atual no Oracle:
SELECT SYSDATE FROM DUAL
Para obter a data atual no SQL Server:
SELECT GETDATE()
Agora se você está transferindo um programa desenvolvido em Oracle para o SQL Server e não deseja remover todas as referências à tabela DUAL, existe uma “solução alternativa” para isso!
Basta criar uma tabela chamada DUAL no SQL Server, conforme exemplo abaixo:
CREATE TABLE DUAL( DUAL varchar(1));
INSERT INTO DUAL (DUAL) VALUES (NULL);
Vamos rodar no SQL Server:
SELECT GETDATE() FROM DUAL;
Como a tabela DUAL possui apenas 1 registro, o retorno da função será apenas 1 também!
Aproveitando:
Para rodar SELECT FROM DUAL no Firebird, você pode usar a tabela RDB$DATABASE que sempre contém um único registro, ou efetuar a mesma “solução alternativa” adotada no SQL Server.
No Postgree o conceito é o mesmo do SQL Server, ou seja, você não precisa de uma tabela “dummy” para retornar as informações, conforme exemplo:
Para obter a data atual no Postgree:
select current_date