0

昨日の日付変換に関する提案をしてくれた人たちのおかげで、私は今、動作するSELECTスクリプトを持っています。

残念ながら、それをUPDATEスクリプトに変換しようとすると、恐ろしくなります。

Msg 4104, Level 16, State 1, Line 25
The multi-part identifier "mbrProject.ID" could not be bound.

スクリプト全体で、一致するID(mbrProject。[ID] = ProjectDates。[Project_ID])ごとにmbrProjectからProjectDatesに日付を挿入する必要があります。また、更新時にユーザーが国の設定を誤っているため、mbrProjectで米国と英国の混合形式の日付を解決する必要があります。テーブル(私の終わりから変更できません)。

Update ProjectDates
SET ProjectDates.[Start_Date] =

(
select right([Start_Date],4) +  
    case 
        when len([Start_Date])=10 then 
            substring([Start_Date],4,2) + left([Start_Date],2)

        else    right('0' + left([Start_Date],firstIndex-1),2) + 
                right('0' + substring([Start_Date],firstIndex+1,secondIndex - firstIndex-1),2) 
                end

from 
    (
    select mp.[Start_Date], charindex('/',mp.[Start_Date],1) firstIndex,
          charindex('/',mp.[Start_Date],charindex('/',mp.[Start_Date],1)+1) secondIndex

    from mbrProject mp
    join ProjectDates pd
    on mp.ID = pd.Project_ID
    )A

where mbrProject.[ID] = ProjectDates.Project_ID
)

SELECTステートメントのみを実行すると、正常に機能し、正しい値が返されます。すなわちからのすべて

select right([Start_Date],4) +  
    case 

至るまで

from mbrProject mp
join ProjectDates pd
on mp.ID = pd.Project_ID
)A

ただし、UPDATEステートメントでラップしようとすると、エラーが発生します。

これは構文にかかっていることは知っていますが、どこに移動しようとしても、それを完全に理解することはできません。

何かアイデアはありますか?

ありがとうクレイグ

4

3 に答える 3

0
(
select mp.[Start_Date], charindex('/',mp.[Start_Date],1) firstIndex,
      charindex('/',mp.[Start_Date],charindex('/',mp.[Start_Date],1)+1) secondIndex

from mbrProject mp
join ProjectDates pd
on mp.ID = pd.Project_ID
)A

ここの最後の行の終わりで、名前、、、およびmp(内部)はテーブル名またはエイリアスとして存在しなくなりました。これ以降、この行セットに適用できる唯一の名前は、指定したエイリアスです。pdmbrProjectProjectDatesA

したがってmp.ID、選択リストに含めてからA.ID、外部比較で使用する必要があります。


ProductDatesまた、何をしようとしているのかわからないので、 (テーブルが更新されていることを)認識していてpd、そのテーブルの2つの別個のインスタンス(内部インスタンスと外部インスタンス)を参照していることを確認したいと思います。決勝戦は次のようになることを願っていWHEREます。

where A.[ID] = ProjectDates.Project_ID
于 2013-01-15T14:51:57.660 に答える
0

問題は、やっているということです

Update ProjectDates
SET ProjectDates.[Start_Date] = (select ...)

1 つの行の 1 つのフィールドを sub-select ステートメントの結果に設定しようとしていますが、これは複数の値を返していると思います。

于 2013-01-15T14:54:11.210 に答える
0

これを試して:

UPDATE PR
SET PR.[Start_Date] = A.[Corrected_Start_Date]
FROM ProjectDates PR
    JOIN
    (
        SELECT
            [Id],
            RIGHT([Start_Date],4) +  
            CASE
                WHEN len([Start_Date])=10
                THEN substring([Start_Date],4,2) + LEFT([Start_Date],2)
                ELSE RIGHT('0' + LEFT([Start_Date],firstIndex-1),2) + 
                         RIGHT('0' + substring([Start_Date],firstIndex+1,secondIndex - firstIndex-1),2) 
            END [Corrected_Start_Date]
        FROM 
        (
            SELECT
                        [Id],
                        [Start_Date],
                        charindex('/',[Start_Date],1) firstIndex,
                        charindex('/',[Start_Date],charindex('/',[Start_Date],1)+1) secondIndex
            FROM mbrProject
        ) S
    ) A
ON A.[ID] = PR.[Project_ID]
于 2013-01-15T14:50:25.350 に答える