2010-02-03 13 views
18

Na czym polega problem z następującym SQL. Nie można użyć zmiennej tabeli tabeli w JOIN klauzula?Serwer SQL: zmienna tabeli używana w łączeniu wewnętrznym

Błąd msg to "Msg 170, Poziom 15, Stan 1, Wiersz 8 Wiersz 8: Niepoprawna składnia w pobliżu" t1 "."

Declare @t TABLE (
    _SportName varchar(50), 
    _Lang  varchar(3) 
) 

insert @t VALUES('Basketball', 'ENG') -- ENG 

UPDATE tblSport t1 
SET 
    t1.SportName = @t._SportName 
FROM 
    @t INNER JOIN tblSport ON (t1.Lang = @t._Lang) 

Dzięki.

Odpowiedz

14

Zmień swoje ostatnie oświadczenie:

UPDATE t1, temp 
SET t1.SportName = temp._SportName 
FROM tblSport AS t1 
INNER JOIN @t AS temp 
    ON t1.Lang = temp._Lang 

(trzeba sprawdzić dokładną składnię)

3

Twój pseudonim t1 jest w niewłaściwym miejscu

UPDATE 
    t1 
SET 
    SportName = @t._SportName 
FROM 
    @t INNER JOIN tblSport t1 ON (t1.Lang = @t._Lang) 
8

odpowiedź Justina jest poprawny składniowo - ci trzeba przypisać alias do tabeli temp (to samo dotyczy zmiennych typu tabeli w 2008 r.).

Należy jednak pamiętać, że ani zmienne tabel, ani zmienne typu tabela nie mają powiązanych z nimi statystyk, a zatem mogą skłonić optymalizator zapytań do bardzo wątpliwych wyborów w odniesieniu do planów wykonania (ponieważ zawsze oceni, że tabela zmienna zawiera 1 wiersz - i dlatego zazwyczaj wybiera zagnieżdżone pętle jako operator łączenia).

2

nie zapomnij wykorzystania alias dla zmiennych stołów

Declare @t TABLE (
    _SportName varchar(50), 
    _Lang  varchar(3) 
) 

insert @t VALUES('Basketball', 'ENG') -- ENG 

UPDATE t1 
SET 
    t1.SportName = t2._SportName 
FROM tblSport t1 INNER JOIN 
    @t as t2 ON (t1.Lang = t2._Lang) 
10

Oprócz alias t1 będących w złym miejscu, nikt inny nie wymienione w nawiasach kwadratowych wokół zmiennej tabeli, zamiast pseudonimu. Zmiana instrukcję aktualizacji do następujących będzie działać zbyt:

UPDATE t1 
SET 
    t1.SportName = [@t]._SportName 
FROM 
    @t INNER JOIN tblSport t1 ON t1.Lang = [@t]._Lang 

[Testowane na SQL Server 2005.]

+2

Właściwie po raz wygląd szukasz składnię był jeden przełomowy najbardziej pomogło mi. +1 ode mnie za to. – Hades200621

+1

Ta jedna robi różnicę. – Rolo

Powiązane problemy