您可以从另一个查询中调用一个查询吗?

时间:2019-06-17 12:48:47

标签: c# sql dapper

当前,我有一个存储过程,它执行一些插入语句,调用另一个存储过程,该存储过程将插入其他内容并返回一个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

这似乎起作用。

1 个答案:

答案 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] [值运算符]

请访问:https://www.tutorialspoint.com/sql/sql-sub-queries.htm