简体   繁体   English

表与SQL Server 2008合并

[英]Table Merge with sql server 2008

I have a database with a usertable. 我有一个有用的数据库。 I want to update all users with a csv file. 我想用csv文件更新所有用户。 I imported my csv file into a temporary table with SqlBulkCopy. 我使用SqlBulkCopy将我的csv文件导入临时表。

My next step would be to create a stored procedure that updates my users table using the temporary table. 我的下一步是创建一个使用临时表更新我的users表的存储过程。 So far i have this: 到目前为止我有这个:

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)
    ;

When i try to execute this i get the error: 当我尝试执行此操作时,我收到错误:

Msg 102, Level 15, State 1, Procedure aml_UserImport2, Line 13 Incorrect syntax near 'MERGE'. 消息102,级别15,状态1,过程aml_UserImport2,行13'MERGE'附近的语法不正确。

What am i doing wrong? 我究竟做错了什么?

I added the semicolumn, but still no luck :-( 我添加了半号,但仍然没有运气:-(

UPDATE: 更新:

I did a recheck, and altough I am using MS SQL Server Management 2008 R2. 我做了一次复查,而且我正在使用MS SQL Server Management 2008 R2。 It seems that my database has the compatability level SQL Server 2005 (90). 似乎我的数据库具有兼容性级别SQL Server 2005(90)。 That probably explains why this is not working.... 这可能解释了为什么这不起作用....

Thanks everyone! 感谢大家!

Put a ; 放一个; after merge. 合并后。

The MERGE statement requires a semicolon (;) as a statement terminator. MERGE语句需要使用分号(;)作为语句终止符。 Error 10713 is raised when a MERGE statement is run without the terminator.(from MSDN) 在没有终结符的情况下运行MERGE语句时引发错误10713。(来自MSDN)

My suggestions are: 我的建议是:

  1. Add a semicolon at the end of the merge expression 在合并表达式的末尾添加分号
  2. Please check if ACTIVE field =defined as INT. 请检查ACTIVE字段=是否定义为INT。 in case it is TINYINT please cast the 1 explicetly 万一是TINYINT,请用1表示

In Merge statement with SQL server you need to end it with ; 在使用SQL Server的Merge语句中,您需要以; Semi-colon 分号

Check Syntax here MSDN 在这里检查语法 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