0

假设我的表由两列IDName.

并假设我的存储过程在 vb.net 上工作,将行插入数据库。

但是当点击添加按钮时,我的系统需要检查ID数据库中是否已经存在输入的文本框。

CREATE PROCEDURE AddOfficeEquipmentProfile
(
@OE_ID      varchar(11),    
@OE_Category        char(3) =NULL,      
@OE_SubCategory char(3)=    NULL,       
@OE_Name        varchar(35)=NULL,       
@OE_User        varchar(35)=NULL,   
@OE_Brand       varchar(15)=NULL,   
@OE_Model       varchar(35)=NULL,   
@OE_Specs       varchar(1000)=NULL,     
@OE_SerialNo        varchar(35)=NULL,   
@OE_PropertyNo  varchar(35)=NULL,   
@OE_MacAddress  varchar(100)=NULL,      
@OE_Static_IP       varchar(15)=NULL,   
@OE_Vendor      varchar(35)=NULL,   
@OE_PurchaseDate    smalldatetime,      
@OE_WarrantyInclusiveYear   int=NULL,   
@OE_WarrantyStatus  char(2)=    NULL,   
@OE_Status      varchar(15)=NULL,       
@OE_Dept_Code   char(3)=    NULL,   
@OE_Location_Code   char(8)=    NULL,       
@OE_Remarks     varchar(1000)=  NULL
)
AS

INSERT INTO tblOfficeEquipmentProfile (OE_ID, OE_Category, OE_SubCategory, OE_Name, OE_User, OE_Brand, OE_Model, OE_Specs, OE_SerialNo,
OE_PropertyNo, OE_MacAddress, OE_Static_IP, OE_Vendor, OE_PurchaseDate, OE_WarrantyInclusiveYear, OE_WarrantyStatus, OE_Status, OE_Dept_Code,
OE_Location_Code, OE_Remarks ) 
VALUES (@OE_ID, @OE_Category, @OE_SubCategory, @OE_Name, @OE_User, @OE_Brand, @OE_Model, 
@OE_Specs, @OE_SerialNo, @OE_PropertyNo, @OE_MacAddress, @OE_Static_IP, @OE_Vendor, @OE_PurchaseDate, @OE_WarrantyInclusiveYear, @OE_WarrantyStatus,
@OE_Status, @OE_Dept_Code, @OE_Location_Code, @OE_Remarks)

GO
4

4 回答 4

3

你可以做的几件事

  1. 将 ID 列设为primary key, 插入时如果重复会出现异常
  2. 您可以使用自动递增ID,然后您不需要检查ID退出与否。数据库将处理
  3. 如果以上都做不到,请运行 select 语句或存储过程来检查 id 是否存在。
于 2013-05-04T08:05:14.180 回答
0

如果这是针对 SQL Server 并且您正在使用存储过程 - 只需尝试以下操作:

CREATE PROCEDURE AddOfficeEquipmentProfile
(
   @OE_ID      varchar(11),    
    ..... all your other parameters here.....
)
AS 
   IF NOT EXISTS (SELECT * FROM dbo.tblOfficeEquipmentProfile WHERE OE_ID = @OE_ID) 
       INSERT INTO dbo.tblOfficeEquipmentProfile(.... list of columns.....)
       VALUES (......list of values................)

假设这OE_ID是您的主键并且是唯一的。只需检查它@OE_ID是否不存在,如果不存在 - 插入数据。如果它存在 - 不要做任何事情。

于 2013-05-04T08:11:36.207 回答
0

基于@marc_s 的答案。为了在数据库中已经存在具有相同 id 的行的情况下向用户显示消息,您可以从查询执行结果中检查受影响的行数。

这假设存储过程仅在 id 不存在且不发出任何错误/异常的情况下插入行。

使用 ADO.NET(使用现有命令执行存储过程):

Dim affectedRows as Integer = command.ExecuteNonQuery()
If affectedRows = 0 Then
    'Handle the error here
    MessageBox.Show("There is already a Profile with the supplied id")
Else
    'Insert was made
End If
于 2013-05-04T08:45:41.913 回答
0

检查以下文章以创建一个 SP 查找任何表中的重复行:

http://www.codeproject.com/Articles/157977/Remove-Duplicate-Rows-from-a-Table-in-SQL-Server

于 2013-05-05T13:50:42.613 回答