我将datatable
作为输入参数传递给存储过程。 Datatable
包含id, Name,Lname,Mobileno,EmpId
。
Employee
表包含[Name],[Lname],[mobno],[Did]
列。
用户登录后,Id
为DId
。有超过1000条记录。我已经创建了,而不是将id
传递给datatable
separete参数到sp。我想将记录添加到Employee
表中,这些表尚不存在。如果已经存在mobileno
和Did
的组合,那么
不要插入Employee
表,否则插入。 Datatable
可能包含可能重复的记录。所以我不想包含那条记录。我只想选择
不同的记录并将它们添加到表中。我对mobile no
感兴趣。如果有10个记录具有相同的moble no
,我将获取记录,这是第一个。
以下代码是对还是错。据我所知,先是from clause
,然后是inner join
,然后是where
,然后是select
。记录从datatable
获取,
然后inner join
发生生成结果,从该结果而不是datatable
它将检查记录。所以它会给我正确的输出。
Create Procedure Proc_InsertEmpDetails
@tblEmp EmpType READONLY,
@DId int
as
begin
INSERT INTO Employee
([Name],[Lname],[mobno],[Did])
SELECT [Name],[Lname],[mobno] @DId
FROM @tblEmp A
Inner join (
select min(Id) as minID, mobno from @tblEmp group by mobno
) MinIDTbl
on MinIDTbl.minID = A.ExcelId
WHERE NOT EXISTS (SELECT 1
FROM Employee B
WHERE B.[mobno] = A.[mobno]
AND B.[Did] = @DId )
end
或者我需要像这样改变
INSERT INTO Employee
([Name],[Lname],[mobno],[Did])
SELECT C.[Name],C.[Lname],C.[mobno], C.D_Id
from
(SELECT [Name],[Lname],[mobno] @DId as D_Id
FROM @tblEmp A
Inner join (
select min(Id) as minID, mobno from @tblEmp group by mobno
) MinIDTbl
on MinIDTbl.minID = A.ExcelId
)C
WHERE NOT EXISTS (SELECT 1
FROM Employee B
WHERE B.[mobno] = C.[mobno]
AND B.[Did] = @DId )