Tsql 从列表中在T-SQL中创建一个循环
我有用C#编写的代码,但我想创建一个在服务器上运行的T-SQL脚本。这是我想转换为T-SQL的C#代码的一部分:Tsql 从列表中在T-SQL中创建一个循环,tsql,Tsql,我有用C#编写的代码,但我想创建一个在服务器上运行的T-SQL脚本。这是我想转换为T-SQL的C#代码的一部分: var enumerator = distinctlist.GetEnumerator(); while (enumerator.MoveNext()) { mtbn dtb = enumerator.Current as mtbn; var user = users.Where(x => x.Name == dtb.UserNa
var enumerator = distinctlist.GetEnumerator();
while (enumerator.MoveNext())
{
mtbn dtb = enumerator.Current as mtbn;
var user = users.Where(x => x.Name == dtb.UserNameTb).FirstOrDefault();
var action = actions.Where(x => x.Name == dtb.ActionTb.Value.ToString()).FirstOrDefault();
var project = projects.Where(x => x.Name == dtb.ProjectNameTb).FirstOrDefault();
var transaction = transactions.Where(x => x.Name == dtb.TransactioNameTb).FirstOrDefault();
TransactBoard transactBoard = dbContext.TransactBoard.Add(new TransactBoard
{
User = user != null ? user : new EF.User { Name = dtb.UserNameTb },
Action = action != null ? action : new EF.Action { Name = dtb.ActionTb.Value.ToString() },
Project = project != null ? project : new Project { Name = dtb.ProjectNameTb, Path = @"S:\\xxxx\\" + dtb.ProjectNameTb },
Transaction = transaction != null ? transaction : new Transaction { Name = dtb.TransactioNameTb },
DateTime = dtb.WriteDateTimeTb.Value
});
dbContext.MonitorControl.Add(
new MonitorControl
{
ElementId = dtb.ElementIdTb.Value,
Category = category.Where(x => x.Id == dtb.CategoryIdTb).FirstOrDefault(),
TransactBoard = transactBoard
});
}
这就是我在T-SQL上所做的:
begin tran
insert dbo.TransactionBoard(TrancationId, UserId, ActionId, ProjectId, [DateTime] )
select t.Id as TrancationId, u.Id as UserId, s.ActionTb, p.Id as ProjectId, s.WriteDateTimeTb
from monitorControlDb.dbo.MonitorlControlTable s
left join dbo.[Transaction] t
on t.[Name] = s.TransactioNameTb
left join dbo.[User] u
on u.[Name] = s.UserNameTb
left join dbo.Project p
on p.[Name] = s.ProjectNameTb
insert dbo.MonitorControl(ElementId, CategoryId)
select s.ElementIdTb, s.CategoryIdTb
from monitorControlDb.dbo.MonitorlControlTable s
commit
您有SQL探查器(SSMS)吗?您可以使用它来收集LINQ发送到DB的查询吗?它会给你一些好的提示,让你更容易找到答案。如何在tsql中实现一个循环?实际上,你的SQL看起来很完美。它将自动循环遍历结果集(来自SELECT语句)并插入所有行。你试过了吗?结果是什么?我已经运行了三次脚本,之后TransactionId再也不会出现在MonitorControl中,即使TransactionBoard有一个标识(1,1)和MonitorControls的约束,当您只运行select语句(没有INSERT)时会得到什么?如
从monitorControlDb.dbo.MonitorControlTable s中选择s.ElementIdTb、s.CategoryIdTb
可能monitorControlDb.dbo。MonitorControlTable
为空