簡體   English   中英

表與SQL Server 2008合並

[英]Table Merge with sql server 2008

我有一個有用的數據庫。 我想用csv文件更新所有用戶。 我使用SqlBulkCopy將我的csv文件導入臨時表。

我的下一步是創建一個使用臨時表更新我的users表的存儲過程。 到目前為止我有這個:

USE [Userdata]
GO
/****** Object:  StoredProcedure [dbo].[aml_UserImport]    Script Date: 03/06/2013 14:11:44 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
-- =============================================
-- Author:      michiel reyers
-- Create date: 07-01-2013
-- Description: 
-- =============================================
CREATE PROCEDURE [dbo].[aml_UserImport2]

AS

    SET NOCOUNT ON;

    MERGE users
        USING temp_users ON temp_users.ID = users.ID
        WHEN MATCHED 
            THEN UPDATE SET users.typeId = temp_users.typeId,
                                users.Name = temp_users.Name,
                                users.active = 1
        WHEN NOT MATCHED BY SOURCE
            THEN UPDATE SET users.active = 0
        WHEN NOT MATCHED BY TARGET
            THEN Insert (ID,typeID,Name,active) 
            VALUES (temp_users.ID,temp_users.typeId,temp_users.Name,1)
    ;

當我嘗試執行此操作時,我收到錯誤:

消息102,級別15,狀態1,過程aml_UserImport2,行13'MERGE'附近的語法不正確。

我究竟做錯了什么?

我添加了半號,但仍然沒有運氣:-(

更新:

我做了一次復查,而且我正在使用MS SQL Server Management 2008 R2。 似乎我的數據庫具有兼容性級別SQL Server 2005(90)。 這可能解釋了為什么這不起作用....

感謝大家!

放一個; 合並后。

MERGE語句需要使用分號(;)作為語句終止符。 在沒有終結符的情況下運行MERGE語句時引發錯誤10713。(來自MSDN)

我的建議是:

  1. 在合並表達式的末尾添加分號
  2. 請檢查ACTIVE字段=是否定義為INT。 萬一是TINYINT,請用1表示

在使用SQL Server的Merge語句中,您需要以; 分號

在這里檢查語法 MSDN

MERGE users
    USING temp_users ON temp_users.ID = users.ID
    WHEN MATCHED 
        THEN UPDATE SET users.typeId = temp_users.typeId,
                        users.Name = temp_users.Name,
                        users.active = 1
    WHEN NOT MATCHED BY SOURCE
        THEN UPDATE SET users.active = 0
    WHEN NOT MATCHED BY TARGET
        THEN Insert (ID,typeID,Name,active) 
            VALUES (temp_users.ID,temp_users.typeId,temp_users.Name,1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM