让存储过程只影响当前聚焦的行

Having a stored procedure affect only the currently focused row

我将 Visual Studio DevExpress Winforms 与 Microsoft SQL 服务器管理器结合使用,我目前正在尝试编写一个存储过程,该过程将在单击按钮时激活,复制将焦点行转移到不同的 table.

我已经调查过了,但未能找到满足我需要的解决方案。如果可能的话,我宁愿不使用复选框,但我对此持开放态度。

存储过程中我当前的代码是:

CREATE PROCEDURE [dbo].[procedurename]
AS
BEGIN
    SET NOCOUNT ON;

    IF NOT EXISTS (SELECT * FROM tbl_b)
        INSERT INTO tbl_b (column names here)
            SELECT DISTINCT (column names here)
            FROM tbl_a
END

在使用按钮测试程序时,我已经能够成功调用此过程,并且它主要按预期运行,将数据从一个 table 移动到另一个没有重复,但是它移动当我只想移动焦点行时,整个 table。

我正在为此使用 gridView,我已经尝试过使用 DataGridView 的解决方案,但似乎不起作用。

这是一个基于桌面的程序。

您的存储过程中需要一个参数来保存您要复制的行的标识

CREATE PROCEDURE [dbo].[procedurename] (@ID int)
AS
BEGIN
    SET NOCOUNT ON;

    IF NOT EXISTS (SELECT * FROM tbl_b)
      INSERT INTO tbl_b (column names here)
        SELECT DISTINCT (column names here)
        FROM tbl_a
        where tbl_A.PrimaryKeyColumn = @ID
END

在按钮的 Click 事件中,您可以执行类似这样的操作

var id = myGridView.GetRowCellValue(myGridView.FocusedRowHandle, "YourPrimaryKeyName");

现在您可以使用这个 id 变量传递给您的存储过程

但是,您的存储过程确实存在另一个问题

    IF NOT EXISTS (SELECT * FROM tbl_b)

一旦其中有 1 行或多行,此检查将永远不允许您进行插入 table。

我想你需要这样的东西

    IF NOT EXISTS (SELECT 1 FROM tbl_b where tbl_b.PrimaryKey = @ID)