mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 04:18:16 +08:00
- 修改 MERGE INTO 别名与 SQL 关键字冲突的 bug;#816
This commit is contained in:
@ -17,58 +17,58 @@ namespace FreeSql.Tests.Odbc.SqlServer
|
||||
var iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new tbioudb01 { id = 1 });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb01] t1
|
||||
USING (SELECT 1 as id ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new tbioudb01 { id = 1 });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb01] t1
|
||||
USING (SELECT 1 as id ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new tbioudb01 { id = 2 });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb01] t1
|
||||
USING (SELECT 2 as id ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new[] { new tbioudb01 { id = 1 }, new tbioudb01 { id = 2 }, new tbioudb01 { id = 3 }, new tbioudb01 { id = 4 } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb01] t1
|
||||
USING (SELECT 1 as id
|
||||
USING (SELECT 1 as [id]
|
||||
UNION ALL
|
||||
SELECT 2
|
||||
UNION ALL
|
||||
SELECT 3
|
||||
UNION ALL
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(2, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new[] { new tbioudb01 { id = 1 }, new tbioudb01 { id = 2 }, new tbioudb01 { id = 3 }, new tbioudb01 { id = 4 } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb01] t1
|
||||
USING (SELECT 1 as id
|
||||
USING (SELECT 1 as [id]
|
||||
UNION ALL
|
||||
SELECT 2
|
||||
UNION ALL
|
||||
SELECT 3
|
||||
UNION ALL
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
}
|
||||
class tbioudb01
|
||||
@ -83,58 +83,58 @@ WHEN NOT MATCHED THEN
|
||||
var iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb02] t1
|
||||
USING (SELECT 1 as id, N'01' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'01' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb02] t1
|
||||
USING (SELECT 1 as id, N'011' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'011' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb02] t1
|
||||
USING (SELECT 2 as id, N'02' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id], N'02' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb02] t1
|
||||
USING (SELECT 1 as id, N'01' as name
|
||||
USING (SELECT 1 as [id], N'01' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02'
|
||||
UNION ALL
|
||||
SELECT 3, N'03'
|
||||
UNION ALL
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(2, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb02] t1
|
||||
USING (SELECT 1 as id, N'001' as name
|
||||
USING (SELECT 1 as [id], N'001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'002'
|
||||
UNION ALL
|
||||
SELECT 3, N'003'
|
||||
UNION ALL
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbioudb02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
|
||||
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
|
||||
@ -152,10 +152,10 @@ WHEN NOT MATCHED THEN
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbioudb022] ON;
|
||||
MERGE INTO [tbioudb022] t1
|
||||
USING (SELECT 1 as id, N'01' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'01' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
@ -163,10 +163,10 @@ SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbioudb022] ON;
|
||||
MERGE INTO [tbioudb022] t1
|
||||
USING (SELECT 1 as id, N'011' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'011' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
|
||||
@ -174,10 +174,10 @@ SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbioudb022] ON;
|
||||
MERGE INTO [tbioudb022] t1
|
||||
USING (SELECT 2 as id, N'02' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id], N'02' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
@ -185,16 +185,16 @@ SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbioudb022] ON;
|
||||
MERGE INTO [tbioudb022] t1
|
||||
USING (SELECT 1 as id, N'01' as name
|
||||
USING (SELECT 1 as [id], N'01' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02'
|
||||
UNION ALL
|
||||
SELECT 3, N'03'
|
||||
UNION ALL
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
Assert.Equal(2, iou.ExecuteAffrows());
|
||||
|
||||
@ -202,16 +202,16 @@ SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbioudb022] ON;
|
||||
MERGE INTO [tbioudb022] t1
|
||||
USING (SELECT 1 as id, N'001' as name
|
||||
USING (SELECT 1 as [id], N'001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'002'
|
||||
UNION ALL
|
||||
SELECT 3, N'003'
|
||||
UNION ALL
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbioudb022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
|
||||
@ -248,16 +248,16 @@ SET IDENTITY_INSERT [tbioudb022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbioudb022] ON;
|
||||
MERGE INTO [tbioudb022] t1
|
||||
USING (SELECT 1 as id, N'100001' as name
|
||||
USING (SELECT 1 as [id], N'100001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'100002'
|
||||
UNION ALL
|
||||
SELECT 3, N'100003'
|
||||
UNION ALL
|
||||
SELECT 4, N'100004' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'100004' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbioudb022] OFF;
|
||||
|
||||
;
|
||||
@ -281,58 +281,58 @@ INSERT INTO [tbioudb022]([name]) VALUES(N'00001'), (N'00002'), (N'00003'), (N'00
|
||||
var iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'01' as name ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'01' as [name] ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'011' as name ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'011' as [name] ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb03] t1
|
||||
USING (SELECT 2 as id1, N'02' as id2, N'02' as name ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
USING (SELECT 2 as [id1], N'02' as [id2], N'02' as [name] ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'01' as name
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'01' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02', N'02'
|
||||
UNION ALL
|
||||
SELECT 3, N'03', N'03'
|
||||
UNION ALL
|
||||
SELECT 4, N'04', N'04' ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
SELECT 4, N'04', N'04' ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(2, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'001' as name
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02', N'002'
|
||||
UNION ALL
|
||||
SELECT 3, N'03', N'003'
|
||||
UNION ALL
|
||||
SELECT 4, N'04', N'004' ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
SELECT 4, N'04', N'004' ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbioudb03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
|
||||
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count());
|
||||
@ -353,58 +353,58 @@ WHEN NOT MATCHED THEN
|
||||
var iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb04] t1
|
||||
USING (SELECT 1 as id, N'01' as name, 0 as version, getdate() as CreateTime ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'01' as [name], 0 as [version], getdate() as [CreateTime] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb04] t1
|
||||
USING (SELECT 1 as id, N'011' as name, 0 as version, getdate() as CreateTime ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'011' as [name], 0 as [version], getdate() as [CreateTime] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb04] t1
|
||||
USING (SELECT 2 as id, N'02' as name, 0 as version, getdate() as CreateTime ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id], N'02' as [name], 0 as [version], getdate() as [CreateTime] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb04] t1
|
||||
USING (SELECT 1 as id, N'01' as name, 0 as version, getdate() as CreateTime
|
||||
USING (SELECT 1 as [id], N'01' as [name], 0 as [version], getdate() as [CreateTime]
|
||||
UNION ALL
|
||||
SELECT 2, N'02', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 3, N'03', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 4, N'04', 0, getdate() ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'04', 0, getdate() ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(2, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbioudb04] t1
|
||||
USING (SELECT 1 as id, N'001' as name, 0 as version, getdate() as CreateTime
|
||||
USING (SELECT 1 as [id], N'001' as [name], 0 as [version], getdate() as [CreateTime]
|
||||
UNION ALL
|
||||
SELECT 2, N'002', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 3, N'003', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 4, N'004', 0, getdate() ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'004', 0, getdate() ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbioudb04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
|
||||
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
|
||||
|
@ -17,58 +17,58 @@ namespace FreeSql.Tests.Odbc.SqlServer
|
||||
var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou01] t1
|
||||
USING (SELECT 1 as id ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou01] t1
|
||||
USING (SELECT 1 as id ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 2 });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou01] t1
|
||||
USING (SELECT 2 as id ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou01] t1
|
||||
USING (SELECT 1 as id
|
||||
USING (SELECT 1 as [id]
|
||||
UNION ALL
|
||||
SELECT 2
|
||||
UNION ALL
|
||||
SELECT 3
|
||||
UNION ALL
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(2, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou01] t1
|
||||
USING (SELECT 1 as id
|
||||
USING (SELECT 1 as [id]
|
||||
UNION ALL
|
||||
SELECT 2
|
||||
UNION ALL
|
||||
SELECT 3
|
||||
UNION ALL
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4 ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id])
|
||||
values (t2.id);", sql);
|
||||
values (t2.[id]);", sql);
|
||||
Assert.Equal(0, iou.ExecuteAffrows());
|
||||
}
|
||||
class tbiou01
|
||||
@ -83,68 +83,68 @@ WHEN NOT MATCHED THEN
|
||||
var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou02] t1
|
||||
USING (SELECT 1 as id, N'01' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'01' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "011" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou02] t1
|
||||
USING (SELECT 1 as id, N'011' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'011' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 2, name = "02" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou02] t1
|
||||
USING (SELECT 2 as id, N'02' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id], N'02' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new[] { new tbiou02 { id = 1, name = "01" }, new tbiou02 { id = 2, name = "02" }, new tbiou02 { id = 3, name = "03" }, new tbiou02 { id = 4, name = "04" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou02] t1
|
||||
USING (SELECT 1 as id, N'01' as name
|
||||
USING (SELECT 1 as [id], N'01' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02'
|
||||
UNION ALL
|
||||
SELECT 3, N'03'
|
||||
UNION ALL
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new[] { new tbiou02 { id = 1, name = "001" }, new tbiou02 { id = 2, name = "002" }, new tbiou02 { id = 3, name = "003" }, new tbiou02 { id = 4, name = "004" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou02] t1
|
||||
USING (SELECT 1 as id, N'001' as name
|
||||
USING (SELECT 1 as [id], N'001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'002'
|
||||
UNION ALL
|
||||
SELECT 3, N'003'
|
||||
UNION ALL
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);", sql);
|
||||
values (t2.[id], t2.[name]);", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbiou02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
|
||||
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
|
||||
@ -162,12 +162,12 @@ WHEN NOT MATCHED THEN
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbiou022] ON;
|
||||
MERGE INTO [tbiou022] t1
|
||||
USING (SELECT 1 as id, N'01' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'01' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
@ -175,12 +175,12 @@ SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbiou022] ON;
|
||||
MERGE INTO [tbiou022] t1
|
||||
USING (SELECT 1 as id, N'011' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'011' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
@ -188,12 +188,12 @@ SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbiou022] ON;
|
||||
MERGE INTO [tbiou022] t1
|
||||
USING (SELECT 2 as id, N'02' as name ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id], N'02' as [name] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
@ -201,18 +201,18 @@ SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbiou022] ON;
|
||||
MERGE INTO [tbiou022] t1
|
||||
USING (SELECT 1 as id, N'01' as name
|
||||
USING (SELECT 1 as [id], N'01' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02'
|
||||
UNION ALL
|
||||
SELECT 3, N'03'
|
||||
UNION ALL
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'04' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
|
||||
@ -220,18 +220,18 @@ SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbiou022] ON;
|
||||
MERGE INTO [tbiou022] t1
|
||||
USING (SELECT 1 as id, N'001' as name
|
||||
USING (SELECT 1 as [id], N'001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'002'
|
||||
UNION ALL
|
||||
SELECT 3, N'003'
|
||||
UNION ALL
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'004' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbiou022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
|
||||
@ -268,18 +268,18 @@ SET IDENTITY_INSERT [tbiou022] OFF;", sql);
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"SET IDENTITY_INSERT [tbiou022] ON;
|
||||
MERGE INTO [tbiou022] t1
|
||||
USING (SELECT 1 as id, N'100001' as name
|
||||
USING (SELECT 1 as [id], N'100001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'100002'
|
||||
UNION ALL
|
||||
SELECT 3, N'100003'
|
||||
UNION ALL
|
||||
SELECT 4, N'100004' ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'100004' ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name])
|
||||
values (t2.id, t2.name);;
|
||||
values (t2.[id], t2.[name]);;
|
||||
SET IDENTITY_INSERT [tbiou022] OFF;
|
||||
|
||||
;
|
||||
@ -303,68 +303,68 @@ INSERT INTO [tbiou022]([name]) VALUES(N'00001'), (N'00002'), (N'00003'), (N'0000
|
||||
var iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "01" });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'01' as name ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'01' as [name] ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "011" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'011' as name ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'011' as [name] ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 2, id2 = "02", name = "02" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou03] t1
|
||||
USING (SELECT 2 as id1, N'02' as id2, N'02' as name ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
USING (SELECT 2 as [id1], N'02' as [id2], N'02' as [name] ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "01" }, new tbiou03 { id1 = 2, id2 = "02", name = "02" }, new tbiou03 { id1 = 3, id2 = "03", name = "03" }, new tbiou03 { id1 = 4, id2 = "04", name = "04" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'01' as name
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'01' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02', N'02'
|
||||
UNION ALL
|
||||
SELECT 3, N'03', N'03'
|
||||
UNION ALL
|
||||
SELECT 4, N'04', N'04' ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
SELECT 4, N'04', N'04' ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "001" }, new tbiou03 { id1 = 2, id2 = "02", name = "002" }, new tbiou03 { id1 = 3, id2 = "03", name = "003" }, new tbiou03 { id1 = 4, id2 = "04", name = "004" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou03] t1
|
||||
USING (SELECT 1 as id1, N'01' as id2, N'001' as name
|
||||
USING (SELECT 1 as [id1], N'01' as [id2], N'001' as [name]
|
||||
UNION ALL
|
||||
SELECT 2, N'02', N'002'
|
||||
UNION ALL
|
||||
SELECT 3, N'03', N'003'
|
||||
UNION ALL
|
||||
SELECT 4, N'04', N'004' ) t2 ON (t1.[id1] = t2.id1 AND t1.[id2] = t2.id2)
|
||||
SELECT 4, N'04', N'004' ) t2 ON (t1.[id1] = t2.[id1] AND t1.[id2] = t2.[id2])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name
|
||||
update set [name] = t2.[name]
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id1], [id2], [name])
|
||||
values (t2.id1, t2.id2, t2.name);", sql);
|
||||
values (t2.[id1], t2.[id2], t2.[name]);", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbiou03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
|
||||
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id1).Count());
|
||||
@ -385,68 +385,68 @@ WHEN NOT MATCHED THEN
|
||||
var iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "01" });
|
||||
var sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou04] t1
|
||||
USING (SELECT 1 as id, N'01' as name, 0 as version, getdate() as CreateTime ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'01' as [name], 0 as [version], getdate() as [CreateTime] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name, [version] = t1.[version] + 1
|
||||
update set [name] = t2.[name], [version] = t1.[version] + 1
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "011" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou04] t1
|
||||
USING (SELECT 1 as id, N'011' as name, 0 as version, getdate() as CreateTime ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 1 as [id], N'011' as [name], 0 as [version], getdate() as [CreateTime] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name, [version] = t1.[version] + 1
|
||||
update set [name] = t2.[name], [version] = t1.[version] + 1
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 2, name = "02" });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou04] t1
|
||||
USING (SELECT 2 as id, N'02' as name, 0 as version, getdate() as CreateTime ) t2 ON (t1.[id] = t2.id)
|
||||
USING (SELECT 2 as [id], N'02' as [name], 0 as [version], getdate() as [CreateTime] ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name, [version] = t1.[version] + 1
|
||||
update set [name] = t2.[name], [version] = t1.[version] + 1
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(1, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new[] { new tbiou04 { id = 1, name = "01" }, new tbiou04 { id = 2, name = "02" }, new tbiou04 { id = 3, name = "03" }, new tbiou04 { id = 4, name = "04" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou04] t1
|
||||
USING (SELECT 1 as id, N'01' as name, 0 as version, getdate() as CreateTime
|
||||
USING (SELECT 1 as [id], N'01' as [name], 0 as [version], getdate() as [CreateTime]
|
||||
UNION ALL
|
||||
SELECT 2, N'02', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 3, N'03', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 4, N'04', 0, getdate() ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'04', 0, getdate() ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name, [version] = t1.[version] + 1
|
||||
update set [name] = t2.[name], [version] = t1.[version] + 1
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
|
||||
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new[] { new tbiou04 { id = 1, name = "001" }, new tbiou04 { id = 2, name = "002" }, new tbiou04 { id = 3, name = "003" }, new tbiou04 { id = 4, name = "004" } });
|
||||
sql = iou.ToSql();
|
||||
Assert.Equal(@"MERGE INTO [tbiou04] t1
|
||||
USING (SELECT 1 as id, N'001' as name, 0 as version, getdate() as CreateTime
|
||||
USING (SELECT 1 as [id], N'001' as [name], 0 as [version], getdate() as [CreateTime]
|
||||
UNION ALL
|
||||
SELECT 2, N'002', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 3, N'003', 0, getdate()
|
||||
UNION ALL
|
||||
SELECT 4, N'004', 0, getdate() ) t2 ON (t1.[id] = t2.id)
|
||||
SELECT 4, N'004', 0, getdate() ) t2 ON (t1.[id] = t2.[id])
|
||||
WHEN MATCHED THEN
|
||||
update set [name] = t2.name, [version] = t1.[version] + 1
|
||||
update set [name] = t2.[name], [version] = t1.[version] + 1
|
||||
WHEN NOT MATCHED THEN
|
||||
insert ([id], [name], [version], [CreateTime])
|
||||
values (t2.id, t2.name, t2.version, t2.CreateTime);", sql);
|
||||
values (t2.[id], t2.[name], t2.[version], t2.[CreateTime]);", sql);
|
||||
Assert.Equal(4, iou.ExecuteAffrows());
|
||||
var lst = fsql.Select<tbiou04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
|
||||
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
|
||||
|
Reference in New Issue
Block a user