如果您有SQL Server 2008或更高版本,则可以使用MERGE语句。下面的Microsoft TechNet文章介绍了MERGE语句相当不错: https://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx
您的查询应该是这个样子:
BULK INSERT #tmp_x FROM 'path\to\file1.csv' WITH (FIELDTERMINATOR =';',ROWTERMINATOR ='\n' ,FIRSTROW = 2);
MERGE TTT AS T
USING #tmp_x AS S
ON (T.Artikelnummer = S.Artikelnummer)
WHEN NOT MATCHED BY TARGET
THEN INSERT(
[Artikelnummer]
,[Artikelbenämning]
,[Count of Ordernummer]
,[Sum of Antal beställda]
,[Min of Skapat Datum]
,[Max of Planerat Plockdatum]
,[Kommentar Inköpsplanerare]
)
VALUES(
S.[Artikelnummer]
,S.[Artikelbenämning]
,S.[Count of Ordernummer]
,S.[Sum of Antal beställda]
,S.[Min of Skapat Datum]
,S.[Max of Planerat Plockdatum]
,S.[Kommentar Inköpsplanerare]
)
WHEN MATCHED
THEN UPDATE
SET T.[Artikelbenämning] = S.[Artikelbenämning]
,T.[Count of Ordernummer] = S.[Count of Ordernummer]
,T.[Sum of Antal beställda] = S.[Sum of Antal beställda]
,T.[Min of Skapat Datum] = S.[Min of Skapat Datum]
,T.[Max of Planerat Plockdatum] = S.[Max of Planerat Plockdatum]
,T.[Kommentar Inköpsplanerare] = S.[Kommentar Inköpsplanerare];
,T.[Kommentar Inköpsplanerare] = ISNULL(S.[Kommentar Inköpsplanerare], T.[Kommentar Inköpsplanerare]);
-- Example exludes records where [Kommentar Inköpsplanerare] IS NULL from the merge
MERGE TTT AS T
USING (
SELECT
[Artikelnummer]
,[Artikelbenämning]
,[Count of Ordernummer]
,[Sum of Antal beställda]
,[Min of Skapat Datum]
,[Max of Planerat Plockdatum]
,[Kommentar Inköpsplanerare]
FROM #tmp_x
WHERE [Kommentar Inköpsplanerare] IS NOT NULL
)AS S
ON (T.Artikelnummer = S.Artikelnummer)
WHEN NOT MATCHED BY TARGET
THEN INSERT(
[Artikelnummer]
,[Artikelbenämning]
,[Count of Ordernummer]
,[Sum of Antal beställda]
,[Min of Skapat Datum]
,[Max of Planerat Plockdatum]
,[Kommentar Inköpsplanerare]
)
VALUES(
S.[Artikelnummer]
,S.[Artikelbenämning]
,S.[Count of Ordernummer]
,S.[Sum of Antal beställda]
,S.[Min of Skapat Datum]
,S.[Max of Planerat Plockdatum]
,S.[Kommentar Inköpsplanerare]
)
WHEN MATCHED
THEN UPDATE
SET T.[Artikelbenämning] = S.[Artikelbenämning]
,T.[Count of Ordernummer] = S.[Count of Ordernummer]
,T.[Sum of Antal beställda] = S.[Sum of Antal beställda]
,T.[Min of Skapat Datum] = S.[Min of Skapat Datum]
,T.[Max of Planerat Plockdatum] = S.[Max of Planerat Plockdatum]
,T.[Kommentar Inköpsplanerare] = S.[Kommentar Inköpsplanerare];
-- Example ignores updates on the [Kommentar Inköpsplanerare] column if the [Kommentar Inköpsplanerare] IS NULL in the source dataset
MERGE TTT AS T
USING #tmp_x AS S
ON (T.Artikelnummer = S.Artikelnummer)
WHEN NOT MATCHED BY TARGET
THEN INSERT(
[Artikelnummer]
,[Artikelbenämning]
,[Count of Ordernummer]
,[Sum of Antal beställda]
,[Min of Skapat Datum]
,[Max of Planerat Plockdatum]
,[Kommentar Inköpsplanerare]
)
VALUES(
S.[Artikelnummer]
,S.[Artikelbenämning]
,S.[Count of Ordernummer]
,S.[Sum of Antal beställda]
,S.[Min of Skapat Datum]
,S.[Max of Planerat Plockdatum]
,S.[Kommentar Inköpsplanerare]
)
WHEN MATCHED
THEN UPDATE
SET T.[Artikelbenämning] = S.[Artikelbenämning]
,T.[Count of Ordernummer] = S.[Count of Ordernummer]
,T.[Sum of Antal beställda] = S.[Sum of Antal beställda]
,T.[Min of Skapat Datum] = S.[Min of Skapat Datum]
,T.[Max of Planerat Plockdatum] = S.[Max of Planerat Plockdatum]
,T.[Kommentar Inköpsplanerare] = ISNULL(S.[Kommentar Inköpsplanerare], T.[Kommentar Inköpsplanerare]);
将WHERE语句改为INNER JOIN,看看它是否适用于您 –