2014-02-07 76 views
1

我有一個更新語句像這樣使用一個變量:TSQL - 在更新語句

UPDATE CompaniesHouse  SET 
    LastOccurrence  =(select top 1 Id from Dataset ORDER BY RowNum DESC), 

    CompanyName   =QCompaniesHouseUpdate.CompanyName, 
    FirmId    =QCompaniesHouseUpdate.FirmId, 
    ... 
    PreviousCompanyDate =QCompaniesHouseUpdate.PreviousCompanyDate, 
    PreviousCompanyName =QCompaniesHouseUpdate.PreviousCompanyName 

FROM QCompaniesHouseUpdate Join CompaniesHouse 
ON (QCompaniesHouseUpdate.FirmId=CompaniesHouse.FirmId) 

GO

我試圖嵌套查詢保存到一個變量,使用像,而不是這一點,但它沒有工作:

declare @dataset int 
select top 1 @dataset = Id from Dataset ORDER BY RowNum DESC 

當我試圖使用變量來代替嵌套查詢我得到的消息:

Msg 137, Level 15, State 2, Line 135 
Must declare the scalar variable "@dataset". 

這並不重要,但也有其他地方它也會有用。我也有點擔心,每次更新都會針對每次插入進行評估,並在稍後的代碼中進行評估。 如果我需要更改代碼,那麼在代碼頂部聲明一次也是有用的。

+1

你執行不同批次的更新語句?不明白爲什麼你會得到這個錯誤,否則。 –

+2

你已經顯示看起來很好。在猜測中,你沒有*顯示的位是錯誤的原因 - 你在'declare' /'select'和'update'之間放置了一個'GO'嗎? –

+0

您可能需要創建一個變量來保存sql字符串,類似Set @ sql ='Update ...'+ @dataset +'查詢的其餘部分' – Jayvee

回答

0

- 試試這個,我只是改變加入,並設置別名表的順序CompaniesHouse(休息似乎確定我)

declare @dataset int 
select top 1 @dataset = Id from Dataset ORDER BY RowNum DESC 
UPDATE C  SET 
    LastOccurrence  [email protected], 

    CompanyName   =QCompaniesHouseUpdate.CompanyName, 
    FirmId    =QCompaniesHouseUpdate.FirmId, 
    ... 
    PreviousCompanyDate =QCompaniesHouseUpdate.PreviousCompanyDate, 
    PreviousCompanyName =QCompaniesHouseUpdate.PreviousCompanyName 

FROM CompaniesHouse C JOIN QCompaniesHouseUpdate 
ON (QCompaniesHouseUpdate.FirmId=CompaniesHouse.FirmId) 
+0

這不會改變查詢結果的任何內容,並因此也不是有效的答案 – NickyvV

+0

爲什麼這將有助於在嵌套查詢中使用變量的問題? – Jayvee

+0

對不起,我忘了使用變量,更新了查詢 –