不,您应该使用单独的存储过程来执行此操作。存储过程(无论如何我认为)应该做最少的工作来完成他们的工作。当您谈论一个同时负责 UPDATE 和 SELECT 操作的存储过程时,您会引入非常奇怪的行为。
但是从技术上讲,你可以这样做
CREATE PROCEDURE dbo.myobject_update_and_retrieve
( @UdpateParam1 varchar(25), @UpdateParam2 int, @UpdatedItemId int )
AS
BEGIN
UPDATE Items
SET UpdateParam1 = @UpdateParam1,
UpdateParam2 = @UpdateParam2
WHERE UpdatedItemId = @UpdatedItemId
SELECT UpdateParam1,UpdateParam2
FROM Items
END
这是不可取的,因为您需要在这里调用ExecuteReader 而不是预期的ExecuteNonQuery。通过调用 ExecuteNonQuery 运行基于 INSERT,UPDATE,DELETE 的存储过程,您会丢失一些为您提供的东西。
这也创建了更容易测试的单元
我会推荐两个单独的程序,如下所示
CREATE PROCEDURE dbo.myobject_update
( @UdpateParam1 varchar(25), @UpdateParam2 int, @UpdatedItemId int )
AS
BEGIN
UPDATE myobjects
SET Col1 = @UpdateParam1,
Col2 = @UpdateParam2
WHERE Id = @UpdatedItemId
END
和
CREATE PROCEDURE dbo.myobject_retrieve
AS
BEGIN
SELECT Col1,Col2,Id FROM myobjects
END