【发布时间】:2013-03-06 14:38:57
【问题描述】:
我有一个带有用户表的数据库。我想用 csv 文件更新所有用户。我使用 SqlBulkCopy 将我的 csv 文件导入到一个临时表中。
我的下一步是创建一个使用临时表更新我的用户表的存储过程。到目前为止,我有这个:
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) 的兼容性级别。这可能解释了为什么这不起作用....
谢谢大家!
【问题讨论】:
-
Gareth,没有更多,但我添加了所有代码...
-
我有点不知所措,因为该程序在我的本地计算机(2008 和 2012 年)以及 SQL Fiddle 上运行没有错误。
-
Gareth 非常感谢您验证我的代码。我进行了重新检查,尽管我使用的是 MS SQL Server Management 2008 R2。看来我的数据库具有 SQL Server 2005 (90) 的兼容性级别。这可能解释了为什么这不起作用....
标签: sql sql-server stored-procedures sql-server-2008-r2