Query med IN, input varchar
Brugere på mit site kan query mange ID's på en gang ... som en ny feature ... jeg kunne jo tage et enkelt ID af gange og printe data på hjemmesiden, men det ved alle jo ik' er så god performance ...Det hele bliver kørt i en stored procedure.
declare @IDS varchar(500) = '2571,4727,2570';
Som det er i dag: ( simplificeret )
SELECT * FROM Players WHERE SID = @SID AND UID = @ID
SELECT * FROM Players WHERE SID = @SID AND UID IN ( @IDS );
Men virker selvf ik', da @IDS er en varchar
Jeg kom så på at lave følgende:
declare @SQL nvarchar(300) = 'SELECT * FROM Players WHERE SID = 7 AND UID IN (' + @IDS + ')';
EXEC sp_executesql @SQL
Følgende virker, men giver problemer da min sql er lidt mere kompleks end vist med lidt flere JOIN's ... og flere WHERE clauses.
løsning bruger jeg SQL på den normale måde, men jeg søger en pæn måde til nogen af mine eksempler til at kunne smide min liste ind i min SQL, så jeg stadig kan gøre overstående ...
declare @IDS varchar(500) = ',2571,4727,2570,';
SELECT * FROM Players WHERE SID = 7 AND @IDS LIKE '%,'+CAST(Players.UID AS NVARCHAR(100))+',%'
Og her er så den første ... med paramters som jeg får nogen flere af med til min stored procedure ...
declare @IDS nvarchar(500) = '2571,4727,2570';
declare @SID tinyint = 7;
declare @SQL nvarchar(300) = 'SELECT * FROM Players WHERE SID = @SID AND UID IN (' + @IDS + ')';
declare @ParmDefinition nvarchar(300) = N'@SID tinyint';
EXEC sp_executesql @SQL, @ParmDefinition, @SID
Sidste giver selvf bedst performance, men kræver lidt mere arbejde hvis der skal laves om i det ....
Kan det virkelig passe at der ikke er andre måder at få lave en "IN" på andre måder ....
Hvad jeg egentlig søger er en måde hvornår jeg egentlig uden at lave min Query dynamisk kan få "compile time" error .... det sker jo ikke ved sidste løsning.
Er der noget jeg har overset? Eller er jeres foreslag også at gøre det som mit sidste eksemple ... ?