webForumDet fria alternativet

hämta email enl användarens val från olika tabeller

Databaser & SQL

1 svar · 280 visningar · startad av Bjuris

Medlem sedan juli 2001514 inlägg
Frågan#1

Jag har en tabell som heter Customer_Offices
OfficeID | CustomerID | CustomerName | CustomerCountry

sedan så har jag en tabell som heter customer_contact som innehåller alla kontakter
ContactID | OfficeID | ContactName | ContactEmail

Sedan så har jag olika tabeller som talar om vilket system kunden kör
System_PC:
OfficeID | UserAddress ...
samt
System_FHL:
OfficeID | FHLAddress

Nu till mitt problem.
Jag håller håller på att fixa en mailsnurra som skall ta ut alla contakter som kör ett visst system:

Exempelvis användaren vill skicka ett mail till alla i Sverige som både kör PC & FHL
Eller att användaren vill skicka ut ett mail till alla som kör PC i hela världen.

CREATE PROCEDURE sp_GetEmails
	@Product	nvarchar(50),
	@Country	nvarchar(50)
AS

SELECT  distinct ContactEmail
FROM Customer_Contact CC
Inner join Customer_Offices CO on 
CC.OfficeID = CO.OfficeID AND CO.CustomerCountry LIKE '%'+@Country+'%'
GROUP BY ContactEmail
HAVING ContactEmail <> '@' AND LTRIM(RTRIM(ContactEmail)) <> ''
GO

Ovan är min SP som jag har kommit en bit på vägen nämligen att man kan skicka till olika länder eller till alla länder (i så fall skickar jag '' med SPn från min kod)
Hur skall jag gå till väga att kunna splitta upp det så att användaren kan hämta ut emails beroende på produkt?

min @Product är en kommaseparerad sträng som jag vill skicka in en:
product = PC, FHL, LM osv.
eller
product = LM osv.

Alltså alla behöver inte vara med.

Jag har även lite funderingar angående den kommaseparerade strängen jag skickar in, kanske skall man använda sig av fler olika inputvariablers för SP'n? @PC, @FHL, @LM, det kanske skulle göra det enklare, men då försvinner det dynamiska i det om man får för sig att lägga till en ny produkt.

Medlem sedan dec. 1999707 inlägg
#2

Jag brukar använda mig av en function (UDF) som gör om CSV-strängar till tabeller. Se här:

http://www.webforum.nu/showthread.php?t=119334

Sedan är det bara att köra en inner join på tabellen.

SELECT  distinct ContactEmail
FROM Customer_Contact CC
Inner join Customer_Offices CO on 
CC.OfficeID = CO.OfficeID AND CO.CustomerCountry LIKE '%'+@Country+'%'

[red]INNER JOIN
System_FHL
ON
System_FHL.OfficeID = CO.OfficeID

INNER JOIN
dbo.parseString(@Product) products
ON
products.IDs = System_FHL.FHLAddress[/red]

Är osäker på om System_FHL är tabellen som matchar @Product, jag bara antog det.

349 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
210 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
211 ms — ändringar (db)