我从Dapper官方文档中看过如下的QueryMultiple,很方便!
var sql = @"
select * from Customers where CustomerId = @id
select * from Orders where CustomerId = @id
select * from Returns where CustomerId = @id";
using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
var customer = multi.Read<Customer>().Single();
var orders = multi.Read<Order>().ToList();
var returns = multi.Read<Return>().ToList();
...
}
Run Code Online (Sandbox Code Playgroud)
现在,当我从Parent-table中删除记录时,我想从Child-table中删除相关记录.小巧玲珑吗?它看起来如下.
var sql = @"delete from tb_role where roleid=@ID
delete from tb_rolepermission where roleid=@ID
delete from tb_userrole where roleid=@ID
";
var param = new { ID=id };
connection.EXECUTEMultiple(sql, param).......... …Run Code Online (Sandbox Code Playgroud) 我有很多类似的结构表,如下所示:
CREATE TABLE [dbo].[tbl_Hierarchy](
[ID] [int] NOT NULL,
[ParentID] [int] NOT NULL,
[Text] [nvarchar](100) NOT NULL,
--other field irrelevant to my question
)
INSERT INTO dbo.tbl_Hierarchy VALUES(1,0,'parent1')
INSERT INTO dbo.tbl_Hierarchy VALUES(2,0,'parent2')
INSERT INTO tbl_Hierarchy VALUES(3,1,'child1')
INSERT INTO tbl_Hierarchy VALUES(4,3,'grandchild1')
INSERT INTO tbl_Hierarchy VALUES(5,2,'child2')
Run Code Online (Sandbox Code Playgroud)
你能帮我写一个包含两个带表名和ID参数的存储过程吗?
例如,执行时
EXEC usp_getChildbyID tbl_Hierarchy, 1
Run Code Online (Sandbox Code Playgroud)
结果集应该是:
ID Text Level
1 parent1 1
3 child1 2
4 grandchild1 3
Run Code Online (Sandbox Code Playgroud)
非常感谢提前.
sql-server stored-procedures hierarchical common-table-expression