2013-06-20 156 views
0

當我執行下面的SQL時,出現錯誤「必須聲明表變量」@ID「。」但我正在貶低它,所以什麼是錯的?SQL聲明錯誤

DECLARE @ID uniqueidentifier 
SET @ID = NEWID() 

SELECT pcx_vacancyassociationId 
INTO  pcx_vacancyassociationBase 
FROM @ID 

SELECT pcx_candidate_to_pcx_vacancyId, .pcx_candidateid, pcx_vacancyid 

INTO pcx_vacancyassociationExtensionBase 
FROM @ID, pcx_candidate_to_pcx_vacancyBase.pcx_candidateid, pcx_candidate_to_pcx_vacancyBase.pcx_vacancyid 
+3

在我看來,如果你聲明它是'UNIQUEIDENTIFIER',而不是表變量。 – 2013-06-20 19:23:00

+1

你希望'@ ID'變量的值怎麼去?如果您希望將它插入到SELECT * INTO查詢中指定的表中,請將它放在* SELECT列表*中,而不是FROM子句中。 –

回答

1

這是因爲@ID不是一個表;這是一個標量值,一個獨特的標識符。您不能在FROM子句中使用標量值。

+0

有沒有一種方法可以生成guid @ID並將其與其他數據一起插入? – user1842828

0

爲了聲明一個表變量,你必須實際聲明它像一個表。

像這樣:

DECLARE @ProductTotals TABLE 
(
    Field1 <type>, 
    Field2 <type> 
) 
2

正如其他人所提到的問題是,它不是一個表變量,不知道你要什麼,但也許你的意思是將值?:

INSERT INTO pcx_vacancyassociationBase (pcx_vacancyassociationId) 
VALUES (@ID) 

不能完全確定哪些領域你想要的,但你可以做一個SELECT INTO:

SELECT @ID as 'pcx_vacancyassociationId', pcx_candidate_to_pcx_vacancyId, pcx_candidateid, pcx_vacancyid 
INTO pcx_vacancyassociationExtensionBase 
FROM Table 

或插入IN TO:

INSERT INTO pcx_vacancyassociationBase 
    SELECT @ID as 'pcx_vacancyassociationId', pcx_candidate_to_pcx_vacancyId, pcx_candidateid, pcx_vacancyid 
    INTO pcx_vacancyassociationExtensionBase 
    FROM Table 

在這兩個版本的@ID將是每一行一樣的,如果你想隨機值的每一行,那麼請不要使用變量,只是SELECT子句中使用NEWID()。

+0

有沒有混合這些值的方法。我的意思是你的例子中的變量和表中的另外兩個變量? – user1842828

+0

當然,什麼桌子? –

+0

源表是pcx_candidate_to_pcx_vacancyBase.pcx_candidateid,pcx_candidate_to_pcx_vacancyBase.pcx_vacancyid我插入的新行需要三個鍵一個新的guid,這些是外鍵 – user1842828