我的SQL Anywhere的12.0.1数据库有两个表:需要帮忙MERGE语句工作
CREATE TABLE "ListDetails" (
ListDetailId UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
ListId UNIQUEIDENTIFIER NOT NULL,
CountryId VARCHAR(3) NULL REFERENCES "Countries" (CountryId) DEFAULT 'USA',
LocaleCode VARCHAR(3) NULL REFERENCES "Locales" (LocaleCode),
Plate VARCHAR(50) NULL,
HashedPlate UNIQUEIDENTIFIER NULL,
AlarmClassId INT NULL REFERENCES "AlarmClasses" (AlarmClassId),
BeginDate DATETIME NULL,
EndDate DATETIME NULL,
ListPriorityId INT NULL REFERENCES "ListPriorities" (ListPriorityId),
VehicleTypeId INT NULL REFERENCES "VehicleTypes" (VehicleTypeId),
PlateClassId INT NULL REFERENCES "PlateClasses" (PlateClassId),
MakeId INT NULL REFERENCES "VehicleBrands" (VehicleBrandId),
ModelId INT NULL REFERENCES "VehicleModels" (VehicleModelId),
"Year" INT NULL,
ColorId INT NULL REFERENCES "VehicleColors" (VehicleColorId),
Notes VARCHAR(8000) NULL,
OfficerNotes VARCHAR(8000) NULL,
IsNewRow BIT NOT NULL DEFAULT '1',
CreatedDate DATETIME NOT NULL DEFAULT NOW(),
i_active SMALLINT NOT NULL DEFAULT 1,
ModifyDate DATETIME NULL,
Subscriber UNIQUEIDENTIFIER NULL,
FromToVersion BIGINT NOT NULL,
FromVersion BIGINT,
InstanceId UNIQUEIDENTIFIER NOT NULL UNIQUE
);
和:
CREATE GLOBAL TEMPORARY TABLE "ListDetailsLoad" (
ListDetailId UNIQUEIDENTIFIER NOT NULL,
ListId UNIQUEIDENTIFIER NOT NULL,
CountryId VARCHAR(3) NULL,
LocaleCode VARCHAR(3) NULL,
Plate VARCHAR(50) NULL,
HashedPlate UNIQUEIDENTIFIER NULL,
AlarmClassId INT NULL,
BeginDate DATETIME NULL,
EndDate DATETIME NULL,
ListPriorityId INT NULL,
VehicleTypeId INT NULL,
PlateClassId INT NULL,
MakeId INT NULL,
ModelId INT NULL,
"Year" INT NULL,
ColorId INT NULL,
Notes VARCHAR(8000) NULL,
OfficerNotes VARCHAR(8000) NULL,
Subscriber UNIQUEIDENTIFIER NULL,
InstanceId UNIQUEIDENTIFIER NOT NULL
) NOT TRANSACTIONAL;
我的程序(用C#编写)进行批量复制成ListDetailsLoad表,然后运行存储过程。存储过程的工作是将数据移动到ListDetails表中。这里的存储过程:
MERGE INTO "ListDetails" AS dst
USING "ListDetailsLoad" AS src
ON dst.ListDetailId = src.ListDetailId
WHEN MATCHED THEN UPDATE
SET ListDetailId = src.ListDetailId,
ListId = src.ListId,
CountryId = src.CountryId,
LocaleCode = src.LocalCode,
Plate = src.Plate,
HashedPlate = src.HashedPlate,
AlarmClassId = src.AlarmClassId,
BeginDate = src.BeginDate,
EndDate = src.EndDate,
ListPriorityId = src.ListPriorityId,
VehicleTypeId = src.VehicleType,
PlateClassId = src.PlateClassId,
MakeId = src.MakeId,
ModelId = src.ModelId,
"Year" = src."Year",
ColorId = src.ColorId,
Notes = src.Notes,
OfficerNotes = src.OfficerNotes,
ModifyDate = NOW(),
FromToVersion = dbVersion.NEXTVAL,
FromVersion = NULL,
Subscriber = src.Subscriber,
InstanceId = src.InstanceId
WHEN NOT MATCHED THEN INSERT
(ListDetailId, ListId, CountryId, LocaleCode, Plate, HashedPlate,
AlarmClassId, BeginDate, EndDate, ListPriorityId, VehicleTypeId, PlateClassId,
MakeId, ModelId, "Year", ColorId, Notes, OfficerNotes,
ModifyDate, FromToVersion, Subscriber, FromVersion, InstanceId)
VALUES
(src.ListDetailId, src.ListId, src.CountryId, src.LocaleCode, src.Plate, src.HashedPlate,
src.AlarmClassId, src.BeginDate, src.EndDate, src.ListPriorityId, src.VehicleTypeId, src.PlateClassId,
src.MakeId, src.ModelId, src."Year", src.ColorId, src.Notes, src.OfficerNotes,
NOW(), dbVersion.NEXTVAL, NULL, src.Subscriber, src.InstanceId);
TRUNCATE TABLE "ListDetailsLoad";
END;
这个编译好。问题是,当我运行它,我得到以下错误信息:
Could not execute statement. Column "ListDetailId" found in more than one table or it is used more than once in the SELECT list -- it needs a correlation name.
如何解决MERGE语句?
可以请你告诉我你是怎么格式化,创造语句,以便nicesly> –
我用空格和制表符在原来,排队的一切了,因为我想?当我创建帖子时,我将代码复制并粘贴到记事本中,并用4个空格替换了所有的选项卡,然后将所有内容都备份。帖子中的对齐方式并不完全是原来的,但是没关系。 –
多么痛苦.i认为你有自动化解决方案 –