0

この記事を使用して、タイムゾーンの特定の都市の日時を別の都市に変換するストアド プロシージャを作成しようとしています

    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.

ストアドプロシージャをチェックして助けてくれる人はいますか? どうもありがとう

4

1 に答える 1

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'
于 2013-03-19T16:32:45.180 に答える