2012-11-20 8 views
7

Abbiamo un problema con SQL Server 2012 a causa della mancanza di supporto per l'operatore *= (LEFT OUTER JOIN).Sintassi SQL per LEFT OUTER JOIN in SQL Server 2012

Qualcuno può dirmi qual è la sintassi corretta per SQL Server 2012 per il seguente SQL che ha funzionato correttamente su SQL Server 2008?

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 
+0

Oh mio io non sapevo nemmeno che si possa fare. – Zane

+1

Per impostazione predefinita non erano consentiti in quale SQL 2000 ?. L'ultima volta che li ho usati era Sql Server 6.0! –

+11

[Cattive abitudini da calciare: utilizzando JOIN vecchio stile] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - quello stile "elenco di tabelle" separato da virgola era ** interrotto ** con ANSI - ** 92 ** SQL Standard .... –

risposta

19

perché non scrivere questo utilizzando JOIN ANSI sintassi:

SELECT t7410.name, t7408.type, t7410.length, 
    t7410.status, t7410.prec, t7410.scale, 
    t7409.type 
FROM dbo.syscolumns t7410 
INNER JOIN dbo.sysobjects t7409 
    ON t7410.id = t7409.id 
INNER JOIN dbo.sysusers t7411 
    ON t7411.uid = t7409.uid 
INNER JOIN master.dbo.syslogins t7412 
    ON t7412.sid = t7411.sid 
LEFT JOIN dbo.systypes t7408 
    ON t7410.usertype = t7408.usertype 
WHERE t7409.name = 'GENERAL' 
    AND t7409.type IN ('U', 'S', 'V') 
    AND t7412.name = user_name() 
ORDER BY t7410.colid ASC 
+1

Hmm mi ha battuto stavo solo lavorando a modo mio però. –

+5

+1, l'uso di JOIN espliciti è molto più pulito –

+0

L'ultima volta che ho visto la notazione a stella è stato quando ho sviluppato Oracle ... – devio