当前,我有一个存储过程,它执行一些插入语句,调用另一个存储过程,该存储过程将插入其他内容并返回一个ID,然后执行一些更新语句。所以有点像这样:
git reset --hard <commitId>
git status
git checkout -- file1 file2....
我想将其移动为使用dapper以及WHILE循环中调用的存储过程,但看不到如何在此存储过程中调用它。
这是while循环中的存储过程:
BEGIN
SET NO COUNT ON;
BEGIN TRY
BEGIN TRAN
-- Do some inserts
DECLARE @MyIdCount int = (SELECT COUNT(MyId) FROM MappingTable)
DECLARE @newId int
WHILE @MyIdCount > 0
BEGIN
EXEC mySproc @parentId = @SomeId, @outId = @newId OUTPUT
-- update table with result from sproc executed above
@MyIdCount = @MyIdCount - 1
END
-- Do some updates based on the table that's been updated in the while loop
SELECT * FROM MyUpdatedTable
END TRAN
END TRY
BEGIN CATCH
-- do something error
END CATCH
END
BEGIN
SET NOCOUNT ON;
INSERT INTO Mapping(ParentId)
VALUES(@parentId)
SELECT @outId = SCOPE_IDENTITY()
END
被定义为@outId
参数,并且通过访问以下内容移动到dapper时效果很好:
OUTPUT
UPDATE
所以我认为我应该能够执行以下操作:
var parameters = new DynamicParameters();
parameters.Add("@parentId", parentId);
parameters.Add("@outId", dbType: DbType.Int64, direction: ParameterDirection.Output);
// some query logic etc.
return parameters.Get<long>("@outId");
我将尝试完全实现它,看看它是否有效。如果有人看到有问题,请说!这将节省我一些时间。谢谢
更新2
这似乎起作用。
答案 0 :(得分:-1)
是的,您可以使用。 子查询或内部查询或嵌套查询是另一个SQL查询中的查询,并嵌入在WHERE子句中。子查询用于返回将在主查询中用作进一步限制要检索的数据的条件的数据。 子查询可与SELECT,INSERT,UPDATE和DELETE语句以及=,<,>,> =,<=,IN,BETWEEN等运算符一起使用。
示例1:
从table1 [,table2]中选择column_name [,column_name],在其中column_name操作者(从table1 [,table2]中选择SELECT column_name [,column_name],[WHERE])
示例2:
插入表名称[(column1 [,column2])] SELECT [* | column1 [,column2] from table1 [,table2] [值运算符]