Reputation: 187
i have this query for insert list of data in table and now i want avoid insert duplicate records how i can do it in my code?
please help me
-- Create a table type to match your input parameters
CREATE TYPE IdNameTable AS TABLE
( ID INT, Name NVARCHAR(50) );
GO
-- change your stored procedure to accept such a table type parameter
ALTER PROCEDURE [dbo].[Register]
@Values IdNameTable READONLY
AS
BEGIN
BEGIN TRY
INSERT INTO dbo.Group (Id, Name)
-- get the values from the table type parameter
SELECT
Id, Name
FROM
@Values
SELECT 0
END TRY
BEGIN CATCH
SELECT -1
END CATCH
END
GO
Upvotes: 1
Views: 28093
Reputation: 1
CREATE TYPE IdNameTable AS TABLE
(ID INT, NAME NVARCHAR(50));
GO
-- change your stored procedure to accept such a table type parameter
ALTER PROCEDURE [dbo].[Register]
@Values IdNameTable READONLY
AS
BEGIN
BEGIN TRY
INSERT INTO dbo.Group (Id,NAME)
-- get the values from the table type parameter
SELECT v.Id,
v.NAME
FROM @Values v
WHERE NOT EXISTS (SELECT 1 FROM dbo.Group gp WHERE gp.id=v.id)
SELECT 0
END TRY
BEGIN CATCH
SELECT -1
END CATCH
END
GO
Upvotes: -1
Reputation: 11
Easiest way is to add Unique constraint to the filed while creating the table for example create table tble_Name ( ID int identity (1,1), Name nvarchar (50) Unique Null ) When you enter a record the query shall prevent duplicate records
Upvotes: 1
Reputation: 25753
Try this way:
INSERT INTO dbo.Group (Id, Name)
SELECT
Id, Name
FROM
@Values
WHERE
ID NOT IN (select ID from Group)
with full code:
-- Create a table type to match your input parameters
CREATE TYPE IdNameTable AS TABLE
( ID INT, Name NVARCHAR(50) );
GO
-- change your stored procedure to accept such a table type parameter
ALTER PROCEDURE [dbo].[Register]
@Values IdNameTable READONLY
AS
BEGIN
BEGIN TRY
INSERT INTO dbo.Group (Id, Name)
SELECT
Id, Name
FROM
@Values
WHERE
ID NOT IN (select ID from Group)
SELECT 0
END TRY
BEGIN CATCH
SELECT -1
END CATCH
END
GO
Upvotes: 5
Reputation: 1581
I have used a NOT EXISTS to check to see if ID is available in dbo.Group table and insert only when no match is found. The assumption is that ID is Unique. Please modify the filter inside the Not EXISTS to tiler for your need. Hope it helps
CREATE TYPE IdNameTable AS TABLE
(ID INT, NAME NVARCHAR(50));
GO
-- change your stored procedure to accept such a table type parameter
ALTER PROCEDURE [dbo].[Register]
@Values IdNameTable READONLY
AS
BEGIN
BEGIN TRY
INSERT INTO dbo.Group (Id,NAME)
-- get the values from the table type parameter
SELECT v.Id,
v.NAME
FROM @Values v
WHERE NOT EXISTS (SELECT 1 FROM dbo.Group gp WHERE gp.id=v.id)
SELECT 0
END TRY
BEGIN CATCH
SELECT -1
END CATCH
END
GO
Upvotes: 1