在sql操作中的顺序?

时间:2015-04-22 05:32:02

标签: asp.net

我将datatable作为输入参数传递给存储过程。 Datatable包含id, Name,Lname,Mobileno,EmpId。   Employee表包含[Name],[Lname],[mobno],[Did]列。   用户登录后,IdDId。有超过1000条记录。我已经创建了,而不是将id传递给datatable   separete参数到sp。我想将记录添加到Employee表中,这些表尚不存在。如果已经存在mobilenoDid的组合,那么   不要插入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 ) 

0 个答案:

没有答案