2017-06-20 504 views
0

我很難在同一個表中將數據從一行復制到另一行。基本上,我有一個案例,列[I/O#]等於'Client1',但我想使[I/O#]列等於'Client2'沒有歸因於Client1擦除的數據,即我想保留與Client1相關的數據,但只是將名稱替換爲Client2在同一個表中將數據從一行復制到另一行SQL

我試圖在我的PHP文件,但徒勞下面的SQL查詢:

$sql_UPDATE_query ="UPDATE [$connectionInfo[Database]].[dbo].[form_record] 
        SET 
         [Last_Edit] = newdata.[Last_Edit], 
         [User_Name] = newdata.[User_Name], 
         [Computer_Name] = newdata.[Computer_Name], 
         [form_name] = newdata.[form_name], 
         [Date] = newdata.[Date], 
         [facility] = newdata.[facility], 
         [Count] = newdata.[Count], 
         [Start_Time] = newdata.[Start_Time], 
         [Stop_Time] = newdata.[Stop_Time], 
         [MW/Hrs_Start] = newdata.[MW/Hrs_Start], 
         [MW/Hrs_Stop] = newdata.[MW/Hrs_Stop], 
         [M³] = newdata.[M³], 
         [MCF] = newdata.[MCF], 
         [Litres] = newdata.[Litres], 
         [Description] = newdata.[Description], 
         [Lock] = newdata.[Lock] 
        FROM 
         (
         SELECT 
          [Last_Edit], 
          [User_Name], 
          [Computer_Name], 
          [form_name], 
          [Date], 
          [facility], 
          [Count], 
          [Start_Time], 
          [Stop_Time], 
          [MW/Hrs_Start], 
          [MW/Hrs_Stop], 
          [M³], 
          [MCF], 
          [Litres], 
          [Description], 
          [Lock] 
         FROM [$connectionInfo[Database]].[dbo].[form_record] 
         WHERE 
          [I/O#] = '$PrevIO' 
         ) newdata 
        WHERE 
         [I/O#] = '$IO'"; 

通過$PrevIO$IO在我的PHP文件中已經定義的方式(只是沒有顯示它),所以這不是在錯誤所在。

現在,我們假設$PrevIO='Client1'$IO='Client2。我如何將屬於Client1的表[form_record]中的所有數據(行)歸入並複製到Client2,然後最終刪除Client1或甚至更好,只需簡單地替換名稱,但你們知道的更好。我認爲newdata可以用作同一表form_record的別名表,但它似乎不起作用。

我正在使用Microsoft SQL 2005 Server。

回答

1

這應該這樣做,你只需要在表中包含正確的連接。

$sql_UPDATE_query ="UPDATE UPD 
        SET 
         [Last_Edit] = newdata.[Last_Edit], 
         [User_Name] = newdata.[User_Name], 
         [Computer_Name] = newdata.[Computer_Name], 
         [form_name] = newdata.[form_name], 
         [Date] = newdata.[Date], 
         [facility] = newdata.[facility], 
         [Count] = newdata.[Count], 
         [Start_Time] = newdata.[Start_Time], 
         [Stop_Time] = newdata.[Stop_Time], 
         [MW/Hrs_Start] = newdata.[MW/Hrs_Start], 
         [MW/Hrs_Stop] = newdata.[MW/Hrs_Stop], 
         [M³] = newdata.[M³], 
         [MCF] = newdata.[MCF], 
         [Litres] = newdata.[Litres], 
         [Description] = newdata.[Description], 
         [Lock] = newdata.[Lock] 
        FROM [$connectionInfo[Database]].[dbo].[form_record] UPD 
        INNER JOIN 
         (
         SELECT 
          [Last_Edit], 
          [User_Name], 
          [Computer_Name], 
          [form_name], 
          [Date], 
          [facility], 
          [Count], 
          [Start_Time], 
          [Stop_Time], 
          [MW/Hrs_Start], 
          [MW/Hrs_Stop], 
          [M³], 
          [MCF], 
          [Litres], 
          [Description], 
          [Lock] 
         FROM [$connectionInfo[Database]].[dbo].[form_record] 
         WHERE 
          [I/O#] = '$PrevIO' 
         ) newdata ON ***newdata.field = UPD.field*** 
        WHERE 
         [I/O#] = '$IO'"; 
+0

它說以下錯誤信息:錯誤:附近有語法錯誤 '*'。 查詢... – Andrew

+1

是的,你需要用你的條件替換'*** newdata.field = UPD.field ***'。 –

0

join condition丟失:

$sql_UPDATE_query ="UPDATE A 
        SET 
         [Last_Edit] = newdata.[Last_Edit], 
         [User_Name] = newdata.[User_Name], 
         [Computer_Name] = newdata.[Computer_Name], 
         [form_name] = newdata.[form_name], 
         [Date] = newdata.[Date], 
         [facility] = newdata.[facility], 
         [Count] = newdata.[Count], 
         [Start_Time] = newdata.[Start_Time], 
         [Stop_Time] = newdata.[Stop_Time], 
         [MW/Hrs_Start] = newdata.[MW/Hrs_Start], 
         [MW/Hrs_Stop] = newdata.[MW/Hrs_Stop], 
         [M³] = newdata.[M³], 
         [MCF] = newdata.[MCF], 
         [Litres] = newdata.[Litres], 
         [Description] = newdata.[Description], 
         [Lock] = newdata.[Lock] 
        FROM [$connectionInfo[Database]].[dbo].[form_record] A 
        INNER JOIN 
         (
         SELECT 
          [Last_Edit], 
          [User_Name], 
          [Computer_Name], 
          [form_name], 
          [Date], 
          [facility], 
          [Count], 
          [Start_Time], 
          [Stop_Time], 
          [MW/Hrs_Start], 
          [MW/Hrs_Stop], 
          [M³], 
          [MCF], 
          [Litres], 
          [Description], 
          [Lock] 
         FROM [$connectionInfo[Database]].[dbo].[form_record] 
         WHERE 
          [I/O#] = '$PrevIO' 
         ) newdata ON newdata.field = A.field 
        WHERE 
         [I/O#] = '$IO'"; 
相關問題