【发布时间】:2012-11-20 21:27:53
【问题描述】:
由于缺乏对 *= (LEFT OUTER JOIN) 运算符的支持,我们遇到了 SQL Server 2012 的问题。
谁能告诉我以下在 SQL Server 2008 上正常运行的 SQL 的 SQL Server 2012 的正确语法是什么?
SELECT
t7410.name, t7408.type, t7410.length,
t7410.status, t7410.prec, t7410.scale,
t7409.type
FROM
dbo.syscolumns t7410, dbo.systypes t7408,
dbo.sysobjects t7409, dbo.sysusers t7411,
master.dbo.syslogins t7412
WHERE
t7410.id = t7409.id
AND t7411.uid = t7409.uid
AND t7409.name = 'GENERAL'
AND t7409.type IN ('U', 'S', 'V')
AND t7410.usertype *= t7408.usertype
AND t7412.sid = t7411.sid
AND t7412.name = user_name()
ORDER BY
t7410.colid ASC
【问题讨论】:
-
哦,我什至不知道你能做到这一点。
-
默认情况下它们在 SQL 2000 中是不允许的?我上次使用它们是 Sql Server 6.0!
-
Bad habits to kick : using old-style JOINs - ANSI-92 SQL 标准不再使用这种旧式“逗号分隔的表列表”样式。 ..
-
您还应该使用 sys.columns、sys.users、sys.types 等。您现在使用的这些向后兼容视图仅用于向后兼容 - 而对象的 uid 并没有甚至与上次这些视图有效时的含义相同(SQL Server 2000)。
标签: sql sql-server tsql sql-server-2012