ive made a couple assumptions but this should work:
CREATE TABLE #TEMP1
(
patId INTEGER NULL
, ancienPatId INTEGER NULL
)
PRINT 'Find patient with no phone number checked SMS - Phase 1'
INSERT INTO #temp1
SELECT DISTINCT
easilyPatient.pat_id
, easilyPatient.pat_ancien_id
FROM [DI628SW].[NOYAU_PATIENT].[noyau].[Patient] AS easilyPatient
WITH (NOLOCK)
LEFT JOIN [DI628SW].[NOYAU_PATIENT].[noyau].[TELEPHONE_PATIENT] AS easilyTelPatient
WITH (NOLOCK) ON easilyPatient.pat_id = easilyTelPatient.pat_id
LEFT JOIN [DI628SW].[NOYAU_PATIENT].[noyau].[TELEPHONE] AS easilyTel
WITH (NOLOCK) ON easilyTelPatient.tel_id = easilyTel.tel_id
WHERE (easilyTel.tel_envoi_sms = 0
OR easilyTel.[tel_envoi_sms] IS NULL)
AND easilyPatient.pat_ancien_id IS NOT NULL
SELECT COUNT(*)
FROM #TEMP1
--Select * from #Temp1
CREATE TABLE #TEMP2
(
cnetPatId INTEGER
, cnetNumTel VARCHAR(40)
, easilyTypeNumTelId INTEGER
, cnetnumeroPrincipal BIT NOT NULL
, cnetSMS INTEGER NOT NULL
, cnetCommentaire VARCHAR(40)
, easilyPatId INTEGER NULL
, Seen BIT DEFAULT 0
)
PRINT 'Matching PATIENT - PHASE 2'
INSERT INTO #temp2
SELECT CNet.pat_id
, LEFT(CNet.[NUM_TEL_REEL], 18) AS CNETNumTel
, CASE CNet.[TYPE_NUM_TEL_ID]
WHEN 1 THEN 1
WHEN 2 THEN 4
WHEN 3 THEN 3
WHEN 4 THEN 0
WHEN 5 THEN 5
END AS easilyTelCat
, CNet.[NUMERO_PRINCIPAL]
, CNet.[SMS]
, Cnet.[COMMENTAIRE]
, tmp1.patId
, 0
FROM [DI81SW].[CNET_EXP].[dbo].[NOYAU_NUM_TELEPHONE] AS CNet WITH (NOLOCK)
INNER JOIN #temp1 AS tmp1 ON tmp1.ancienPatId = CNet.pat_id
WHERE (CNet.[SMS] = 1)
AND (LEFT(CNet.[NUM_TEL_REEL], 18) NOT IN (
SELECT tel_numero COLLATE SQL_Latin1_General_CP1_CI_AS
FROM [DI628SW].[NOYAU_PATIENT].[noyau].[TELEPHONE_PATIENT]
AS TP WITH (NOLOCK)
INNER JOIN [DI628SW].[NOYAU_PATIENT].[noyau].[TELEPHONE]
AS T WITH (NOLOCK) ON TP.TEL_ID = T.TEL_ID
WHERE t.tel_envoi_sms = 1
AND tmp1.patid = TP.pat_id))
SELECT COUNT(*)
FROM #TEMP2
--Select * from #temp2
--DROP TABLE #TEMP1
--DROP TABLE #TEMP2
PRINT 'Insert missing phones - Phase 3'
DECLARE @cnetPatId INTEGER
DECLARE @cnetNumTel VARCHAR(40)
DECLARE @easilyTypeNumTelId INTEGER
DECLARE @cnetnumeroPrincipal BIT
DECLARE @cnetSMS BIT
DECLARE @easilyPatId INTEGER
DECLARE @cnetCommentaire VARCHAR(40)
DECLARE @bdEasilyTelephone VARCHAR(100)
DECLARE @bdEasilyTelephonePATIENT VARCHAR(100)
DECLARE @siteCode VARCHAR(10)
DECLARE @count INT
DECLARE @rowNumber INT
WHILE @count >= @rowNumber
BEGIN
SELECT TOP 1 @cnetPatId = etPatId
, @cnetNumTel = cnetNumTel
, @easilyTypeNumTelId = easilyTypeNumTelId
, @cnetnumeroPrincipal = cnetnumeroPrincipal
, @cnetSMS = cnetSMS
, @cnetCommentaire = cnetCommentaire
, @easilyPatId = easilyPatId
FROM #temp2
WHERE seen = 0
INSERT INTO [DI628SW].[NOYAU_PATIENT].[noyau].[TELEPHONE]
(tel_categorie
, tel_numero
, tel_envoi_sms
, tel_principal
, tel_commentaire
, tel_administratif
, tel_actif)
SELECT @easilyTypeNumTelId
, @cnetNumTel
, @cnetSMS
, @cnetnumeroPrincipal
, @cnetCommentaire
, 0
, 1
DECLARE @idTelephone INTEGER
SELECT @idTelephone = @@IDENTITY
INSERT INTO [DI628SW].[NOYAU_PATIENT].[noyau].[TELEPHONE_PATIENT]
(tel_id
, pat_id)
SELECT @idTelephone
, @easilyPatId
UPDATE #TEMP2 SET Seen = 1 WHERE etPatId =@cnetPatId -- Assumed this is the key
SET @rowNumber = @rowNumber+1
END
DROP TABLE #TEMP1
DROP TABLE #TEMP2
Also when you post code try using the IFCode Shortcuts on the side. this helps make it easier to read and pull out teh sql code from the post 🙂