Вот процедура, которую я использовал ........Как избежать дубликатов при вставке записи с помощью хранимой процедуры ...?
CREATE procedure AcademicDetailsInsert
@CandidateId int,
@DegreeIDs varchar(25),
@Board_Universities varchar(200),
@YearsOfPassing varchar(50),
@Percentages varchar(50)
As
set NOCOUNT ON
DECLARE @ReturnValue INT
BEGIN
BEGIN TRY
select @ReturnValue = 0
IF EXISTS (SELECT ITEM AS DegID
FROM [SplitString](@DegreeIDs,','))
INSERT INTO [AcademicDetails] ([CandidateID], [DegreeId], [Board_University], [Year_Of_Passing], [Percentage])
SELECT
@CandidateID,
DegID.ITEM, Board_Uni.Item, YOfPass.ITEM,
Perc.ITEM
FROM
[splitString](@DegreeIDs, ',') DegID,
[splitString](@Board_Universities, ',') Board_Uni,
[splitString](@YearsOfPassing, ',') YOfPass,
[splitString](@Percentages, ',') Perc
WHERE
DegID.ITEM NOT IN (SELECT DegreeID
FROM AcademicDetails
WHERE CandidateID = @CandidateID)
END TRY
BEGIN CATCH
SELECT
ERROR_NUMBER() AS ERROR_NO,
ERROR_MESSAGE() AS ERROR_MSG,
ERROR_LINE() AS ERROR_LINE_NO
END CATCH
END
И это код, который я использовал для запуска процедуры ...
EXEC AcademicDetailsInsert 1,'2,3','NMU,IND','2005,2008','66.33,71.65'
И вот результат ..
1 2 nmu 2005 66.33
1 2 nmu 2008 66.33
1 2 nmu 2005 23.65
1 2 nmu 2008 23.65
1 2 nasik 2005 66.33
1 2 nasik 2008 66.33
1 2 nasik 2005 23.65
1 2 nasik 2008 23.65
1 3 nmu 2005 66.33
1 3 nmu 2008 66.33
1 3 nmu 2005 23.65
1 3 nmu 2008 23.65
1 3 nasik 2005 66.33
1 3 nasik 2008 66.33
1 3 nasik 2005 23.65
1 3 nasik 2008 23.65
Когда я прохожу деталь для двух записей для одного кандидата дать другой результат
Но вместо двух записей я получаю повторную запись. Функция SplitString
используется для разделения функций, чтобы разделить степень, разные названия университетов и год и проценты.
Как я могу избежать этого ...?
SQL Server 2008 имеет [таблица значение параметров] (https: // MSDN. microsoft.com/en-us/library/bb510489.aspx), который я использовал бы здесь вместо разбора строк. –
Вы делаете 'CROSS JOIN' в своем' SELECT'. Вот почему вы получаете больше записей, чем нужно. –
Так как я могу избежать CROSS JOIN, чтобы вставить эту две записи ..? – kls