Ho una situazione in cui sto visualizzando i record su una pagina e ho bisogno di un modo per l'utente di selezionare un sottoinsieme di quei record da visualizzare su un'altra pagina. Questi record non vengono memorizzati da nessuna parte, quindi è una cosa generata dinamicamente. So che potrei usare jquery per passare un valore separato da virgole alla mia altra pagina web, ma non sono sicuro di quale sia il modo migliore di in sql dire dove uniqueid è in questa lista di id non in una tabella ecc. I so che potrei costruire dinamicamente lo sql con un gruppo di ors, ma sembra un trucco. Qualcun altro ha qualche suggerimento?confrontando una colonna con un elenco di valori in t-sql
risposta
Questa è la migliore fonte:
http://www.sommarskog.se/arrays-in-sql.html
creare una funzione split, e utilizzarlo come:
SELECT
*
FROM YourTable y
INNER JOIN dbo.splitFunction(@Parameter) s ON y.ID=s.Value
I prefer the number table approach
Per questo metodo funzioni, è necessario fare questa configurazione tavolo una volta:
SELECT TOP 10000 IDENTITY(int,1,1) AS Number
INTO Numbers
FROM sys.objects s1
CROSS JOIN sys.objects s2
ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)
Una volta che i numeri della tabella viene istituito, a creare questa funzione:
CREATE FUNCTION [dbo].[FN_ListToTable]
(
@SplitOn char(1) --REQUIRED, the character to split the @List string on
,@List varchar(8000)--REQUIRED, the list to split apart
)
RETURNS TABLE
AS
RETURN
(
----------------
--SINGLE QUERY-- --this will not return empty rows
----------------
SELECT
ListValue
FROM (SELECT
LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue
FROM (
SELECT @SplitOn + @List + @SplitOn AS List2
) AS dt
INNER JOIN Numbers n ON n.Number < LEN(dt.List2)
WHERE SUBSTRING(List2, number, 1) = @SplitOn
) dt2
WHERE ListValue IS NOT NULL AND ListValue!=''
);
GO
Si può ora facilmente dividere un stringa CSV in una tabella e unirsi su di esso:
select * from dbo.FN_ListToTable(',','1,2,3,,,4,5,6777,,,')
USCITA:
ListValue
-----------------------
1
2
3
4
5
6777
(6 row(s) affected)
tuo può passare in una stringa CSV in una procedura e di processo solo le righe per gli ID indicati:
SELECT
y.*
FROM YourTable y
INNER JOIN dbo.FN_ListToTable(',',@GivenCSV) s ON y.ID=s.ListValue
Per questo problema è possibile utilizzare la soluzione Joel Spolsky recently gave.
SELECT * FROM MyTable
WHERE ',' + 'comma,separated,list,of,words' + ','
LIKE '%,' + MyTable.word + ',%';
Questa soluzione è intelligente ma lenta. La soluzione migliore è quella di dividere la stringa separata da virgole, e costruire una query SQL dinamico con la IN()
predicato, aggiungendo un segnaposto parametro di query per ogni elemento nell'elenco di valori:
SELECT * FROM MyTable
WHERE word IN (?, ?, ?, ?, ?, ?, ?, ?);
il numero di segnaposto è quello devi determinare quando dividi la stringa separata da virgola. Quindi passare un valore da quella lista per parametro.
Se si dispone di troppi valori nella lista e facendo un lungo IN()
predicato è ingombrante, quindi inserire i valori in una tabella temporanea, e JOIN
contro la vostra tabella principale:
CREATE TEMPORARY TABLE TempTableForSplitValues (word VARCHAR(20));
...split your comma-separated list and INSERT each value to a separate row...
SELECT * FROM MyTable JOIN TempTableForSplitValues USING (word);
vedono anche molti altri simili domande sul SO, tra cui:
Il "dispositivo" menzionato per primo è AT Almeno 30 anni (è precedente persino a SQL stesso). Non sembra appropriato rinominarlo dopo una persona contemporanea. – RBarryYoung
Abbastanza giusto. Riformulerò la frase. –
- 1. confrontando valori di una riga
- 2. CON VALORI TSQL
- 3. TSQL: aggiorna una colonna in null
- 4. TSQL, contando coppie di valori in una tabella
- 5. Come interrogare la colonna xml in tsql
- 6. Confrontando una variabile a valori multipli
- 7. TSQL - Media di tutti i valori in una colonna diversa da zero
- 8. Ottieni colonna DataFrame come elenco di valori
- 9. Scrittura di un elenco Python in una singola colonna CSV
- 10. Fare una colonna con valori duplicati unica in un dataframe
- 11. Confrontando i valori in virgola mobile
- 12. Confrontando due valori esadecimali in C++
- 13. Rimuovere una colonna da un elenco nidificato in Python
- 14. Inserimento di un elenco di valori in una tabella di SQL Server con stored procedure
- 15. sostituire un elenco di valori con un altro in R
- 16. TSQL - Corrispondenza parziale con LIKE per più valori
- 17. Ottenere un elenco di valori distinti nell'elenco
- 18. Come copiare una colonna di una tabella nella colonna di un'altra tabella in PostgreSQL confrontando lo stesso ID
- 19. Rubino: È una stringa in un elenco di valori
- 20. selezionare un elemento da una colonna personalizzata da un elenco
- 21. Copia tutti i valori in una colonna in una nuova colonna in un dataframe panda
- 22. TSQL: ordine per asc senza nome colonna
- 23. Confrontando gli URL con parametri in Java
- 24. Crea un elenco di valori definiti in CTE
- 25. Elenca indici di valori duplicati in un elenco con Python
- 26. Come aggiornare i dati di una colonna utilizzando altri dati di tabelle TSQL
- 27. eliminare le righe con valori vuoti in una determinata colonna
- 28. Confrontando Double.NaN con se stessa
- 29. Inserire più valori in una colonna mysql?
- 30. confrontando int con size_t
http://stackoverflow.com/questions/878833/ –