2013-03-19 21 views
0

我試圖創建存儲過程誰時區的特定城市的日期時間轉換爲另一種使用這篇文章:Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005檢查存儲過程:轉換時區的特定城市的日期時間到另一個

ALTER PROCEDURE [dbo].[Get_TimeOfTimeZone] 
    (
     @DateTimeFrom datetime, 
     @CityNameFrom nvarchar(MAX), 
     @CityNameTo  nvarchar(MAX), 
     @ResultDate  datetime OUTPUT 
    ) 

AS 
    SET NOCOUNT ON 

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

    Declare @Query nvarchar(1000) 
    Declare @ParmDefinition nvarchar (500) 

    SET @Query = N'' 
    SET @Query = @Query + N'SELECT tz.Offset, tz.TimeZoneID ' 
    SET @Query = @Query + N'FROM TimeZoneCity, TimeZones tz WITH (NOLOCK) ' 
    --SET @Query = @Query + N'INNER JOIN TimeZones WITH (NOLOCK) ON TimeZoneCity.TimeZoneID = tz.TimeZoneID ' 
    SET @Query = @Query + N'LEFT JOIN TimeZoneDaylightSavings WITH (NOLOCK) ON TimeZoneDaylightSavings.TimeZoneID = tz.TimeZoneID ' 
    SET @Query = @Query + N' WHERE TimeZoneCity.CityName = @CityNameTo ' 
    SET @Query = @Query + N' AND TimeZoneCity.TimeZoneID = tz.TimeZoneID ' 
    SET @Query = @Query + N'  AND @DateTimeFrom >= TimeZoneDaylightSavings.BeginDst AND @DateTimeFrom < TimeZoneDaylightSavings.EndDst ' 

    SET @Query = @Query + N'SET @ResultDate = DATEADD(HH, tz.Offset + CASE WHEN tz.TimeZoneID IS NOT NULL THEN 1 ELSE 0 END, ' 
    SET @Query = @Query + N'       DATEADD(HH, (SELECT TimeZones.Offset ' 
    SET @Query = @Query + N'           FROM TimeZones, TimeZoneCity WITH (NOLOCK) ' 
    SET @Query = @Query + N'           WHERE TimeZoneCity.CityName = @CityNameFrom ' 
    SET @Query = @Query + N'           AND TimeZoneCity.TimeZoneID = TimeZones.TimeZoneID), ' 
    SET @Query = @Query + N'         @DateTimeFrom)) ' 

    SET @ParmDefinition = N'@ResultDate datetime, @DateTimeFrom datetime, @CityNameFrom nvarchar(MAX), @CityNameTo nvarchar(MAX) ' 

    EXECUTE sp_executesql @Query, @ParmDefinition, @ResultDate = @ResultDate, @DateTimeFrom = @DateTimeFrom, @CityNameFrom = @CityNameFrom, @CityNameTo = @CityNameTo 

    SET NOCOUNT OFF 
RETURN 

當我執行它,我有這些錯誤:

Msg 4104, Level 16, State 1, Line 1 
The multi-part identifier "tz.Offset" could not be bound. 
Msg 4104, Level 16, State 1, Line 1 
The multi-part identifier "tz.TimeZoneID" could not be bound. 

任何人可以檢查我的存儲過程,並幫助我嗎?非常感謝

回答

0

您在查詢中混合了JOIN類型。下面一行用逗號連接和WHERE條款

FROM TimeZoneCity, TimeZones tz WITH (NOLOCK) 

因爲你是混合聯接語法,別名tz不可用。你應該始終使用相同的語法。這條線應該是:

SET @Query = @Query + N'FROM TimeZoneCity 
         INNER JOIN TimeZones tz WITH (NOLOCK) 
           ON TimeZoneCity.TimeZoneID = tz.TimeZoneID' 
+0

感謝bluefeet,這是一個好點,但它沒有解決我的問題,我有同樣的錯誤。也許第二部分查詢不正確? – Vinipuh 2013-03-19 17:37:51

+0

如果刪除查詢中的SET @ ResultDate部分,它是否有效? – Taryn 2013-03-19 17:41:10

+0

如果我刪除它的作品! – Vinipuh 2013-03-19 17:59:22

相關問題