如何使用用户定义的表类型在sql server表中插入数据,并检查重复数据?



我使用c#在sql server中上传excel文件数据。我正在创建一个数据表并将其传递给SP.我已经创建了如下的SP

Create PROCEDURE [dbo].[usp_InsertData]
@dt AS dbo.tbl_employees READONLY,
@CREATEDBY as varchar(50),
@folderPath as nvarchar(3000),
@result as varchar(100) OUTPUT
AS
BEGIN

INSERT INTO Employees(Name, Email, Branch, CreatedBy, FolderPath)
SELECT Name, Email, Branch,@CREATEDBY, @folderPath
FROM @dt; 
set @result='Success';

select @result
Print @result
END 

但是它没有给我输出值。我还想用实际表(Employees)验证用户定义表(dbo.tbl_employees)中的重复数据。如果有任何重复的数据,那么它应该给出一个消息"重复的数据"。不知道该怎么做。有人能帮我把它修好吗?由于

你应该在你的表上有一个唯一的约束,以确保你不会得到重复的数据。

但是如果你想要一个特殊的返回值(而不是抛出一个错误),你需要先检查你的数据,并有条件地返回一个值。

CREATE OR ALTER PROCEDURE dbo.usp_InsertData
@dt AS dbo.tbl_employees READONLY,
@CREATEDBY as varchar(50),
@folderPath as nvarchar(3000),
@result as varchar(100) OUTPUT
AS
SET XACT_ABORT ON;
BEGIN TRAN;
IF EXISTS (SELECT 1
FROM Employees e WITH (HOLDLOCK)
JOIN @dt dt ON dt.Name = e.Name
)
BEGIN
SET @result = 'Duplicate data';
ROLLBACK;
RETURN;
END;
INSERT INTO Employees
(Name, Email, Branch, CreatedBy, FolderPath)
SELECT Name, Email, Branch, @CREATEDBY, @folderPath
FROM @dt;
SET @result = 'Success';
COMMIT;

如果你在c#中从OUTPUT参数中获取信息有问题,那么这是一个单独的问题。已经有很多帖子告诉你如何做到这一点。

相关内容

  • 没有找到相关文章

最新更新