0

我正在将 Visual Studio 与 DevExpress Winforms 与 Microsoft SQL Server Manager 结合使用,我目前正在尝试编写一个存储过程,该过程将在单击按钮时激活,将焦点行复制到另一个表中。

我已经对其进行了研究,但无法找到可以满足我需要的解决方案。如果可能的话,我宁愿不使用复选框,但我对此持开放态度。

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

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

在使用按钮测试程序时,我已经能够成功调用此过程,并且它的功能大部分都符合预期,将数据从一个表移动到另一个表而没有重复,但是当我只想移动时它会移动整个表重点排。

我为此使用了 gridView,并且我尝试了使用 DataGridView 的解决方案,但这些解决方案似乎不起作用。

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

4

1 回答 1

1

您需要在存储过程中包含一个参数,该参数包含您要复制的行的标识

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 行或更多行,此检查将永远不允许您进行插入。

我认为你需要类似的东西

    IF NOT EXISTS (SELECT 1 FROM tbl_b where tbl_b.PrimaryKey = @ID)
于 2021-06-25T12:49:32.290 回答