上一篇
"哥们,Oracle的DUAL
表真好用啊,随便查个系统变量都不用找真实表…"
"谁说MSSQL不能有?" 👨💻 你叼着棒棒糖敲出了SELECT 1+1 FROM (SELECT 1) AS DUAL(x)
没错!虽然SQL Server没有原生DUAL
表,但老司机们早就玩出了花样~
Oracle的祖传彩蛋 🥚:一个单行单列的虚拟表,常用于快速测试表达式或调用系统函数:
-- Oracle经典用法 SELECT SYSDATE FROM DUAL;
MSSQL的解决方案 🛠️:
-- 等效实现 SELECT GETDATE() AS CurrentTime; -- 或者强制"扮演"DUAL SELECT 'MSSQL版DUAL' FROM (VALUES(1)) AS DUAL(dummy);
-- 方法1:VALUES构造函数 SELECT 'Hello DUAL!' FROM (VALUES(1)) AS DUAL(dummy); -- 方法2:WITH子句版 WITH DUAL AS (SELECT 1 AS dummy) SELECT POWER(2,10) FROM DUAL; -- 1024
-- 检查服务器时间+时区 SELECT GETDATE() AS [Now], @@SERVERNAME AS [Server], FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss') AS [Formatted] FROM (VALUES(1)) AS DUAL(x);
-- 快速计算表达式 SELECT 365*24 AS [小时/年], RAND()*100 AS [随机数], ASCII('A') AS [A的ASCII码] FROM (SELECT 1) AS DUAL(dummy);
-- 测试类型转换 SELECT CAST('2025-08-01' AS DATETIME) AS [日期], TRY_CONVERT(FLOAT, '3.14π') AS [尝试转换], SQL_VARIANT_PROPERTY(0x6A, 'BaseType') AS [二进制类型] FROM (VALUES(1)) AS DUAL(x);
-- 生成批量创建表语句 DECLARE @sql NVARCHAR(MAX); SELECT @sql = STRING_AGG( CONCAT('CREATE TABLE ', name, '(ID INT);'), CHAR(13) FROM sys.tables WHERE type = 'U'; SELECT @sql AS [GeneratedSQL] FROM (VALUES(1)) AS DUAL(x);
SELECT 表达式
效率更高 保存这段代码到你的SQL工具箱:
CREATE VIEW v_DUAL AS SELECT 1 AS dummy; -- 以后就能像Oracle一样使用 SELECT @@VERSION FROM v_DUAL;
虽然MSSQL没有原生DUAL表,但通过:
✅ VALUES构造函数
✅ 单行子查询
✅ 自定义视图
同样能实现"无表查询"的优雅操作!下次同事再羡慕Oracle时,反手就是一段MSSQL魔改DUAL秀吧~ 💥
(本文示例基于SQL Server 2022环境验证,2025-08参考)
本文由 白灵枫 于2025-08-04发表在【云服务器提供商】,文中图片由(白灵枫)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/535471.html
发表评论