我有一种情况,即在页面上显示记录,并且我需要一种方式让用户选择这些记录的子集以显示在另一个页面上。这些记录不存储在任何地方,它是一个动态生成的东西。我知道我可以使用jquery传递一个逗号分隔值到我的其他网页,但我不知道什么是最好的方式在sql中说uniqueid是在这个id列表不在表中等我知道我可以动态地用一堆或多个SQL来构建SQL,但是这看起来像是一个黑客。任何人有任何建议?将列与t-sql中的值列表进行比较
回答
这是最好的来源:
http://www.sommarskog.se/arrays-in-sql.html
创建拆分功能,使用它像:
SELECT
*
FROM YourTable y
INNER JOIN dbo.splitFunction(@Parameter) s ON y.ID=s.Value
I prefer the number table approach
对于这种方法的工作,你需要做的这一个时间表设置:
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)
一旦表中设置了数字,创建此功能:
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
现在,您可以轻松地拆分CSV字符串转换成表格,并加入就可以了:
select * from dbo.FN_ListToTable(',','1,2,3,,,4,5,6777,,,')
OUTPUT:
ListValue
-----------------------
1
2
3
4
5
6777
(6 row(s) affected)
你可以在CSV字符串传递到一个程序和过程仅行用于给定的ID:
SELECT
y.*
FROM YourTable y
INNER JOIN dbo.FN_ListToTable(',',@GivenCSV) s ON y.ID=s.ListValue
对于此问题,您可以使用解决方案Joel Spolsky recently gave。
SELECT * FROM MyTable
WHERE ',' + 'comma,separated,list,of,words' + ','
LIKE '%,' + MyTable.word + ',%';
该解决方案聪明但缓慢。更好的解决方案是分裂逗号分隔的字符串,并构建与IN()
谓词动态SQL查询中,值列表添加的每个元素的查询参数占位符:
SELECT * FROM MyTable
WHERE word IN (?, ?, ?, ?, ?, ?, ?, ?);
占位符的数字是什么您必须确定何时分隔逗号分隔的字符串。然后从每个参数的列表中通过一个值。
如果在列表中有太多值,使长IN()
谓词是笨拙的,然后插入值到一个临时表,并JOIN
对你的主表:
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);
也看到很多其他类似在SO问题,包括:
第一提及的“装置”是在至少30岁(甚至早于SQL本身)。在当代一个人之后重新命名它似乎不合适。 – RBarryYoung 2009-09-22 05:54:11
够公平的。我会重写这个句子。 – 2009-09-22 06:19:46
- 1. 将字典中的值与列表中的值进行比较
- 2. 将列与有效值进行比较
- 3. 将UUID与GattService列表进行比较
- 4. 将列表与txt文件中的列进行比较
- 5. 如何将列中的值与SQL Server中的长列表进行比较
- 6. 比较2 excel列,结果将与另一列进行比较
- 7. 将Scala列表与Java列表进行比较
- 8. 将列表与其他多个列表进行比较
- 9. 如何将列中的值与使用R的列中的值进行比较?
- 10. 迭代列表并将其值与字典进行比较
- 11. 如何将数据帧唯一值与列表进行比较?
- 12. 将SQL中的两个值与列之间的比较进行比较
- 13. 将列名与Microsoft SQL Server中的相应值进行比较
- 14. 将mysql中CSV列的值与更多检查进行比较
- 15. 将每一行的列与特定行的列进行比较
- 16. 将字典与不可比较的值或不可比较的值进行比较? (如列表或数据框)
- 17. 将单列值与另一列中的单列select查询进行比较sql
- 18. 将字符串与python中的类列表进行比较
- 19. 将列表中的元素与其邻居进行比较
- 20. 将五列与SQL中的其他五列进行比较
- 21. 如何将列表与C#中的现有列表进行比较?
- 22. 与列表比较列表
- 23. 将列值与存储过程的结果进行比较
- 24. 无法将传递的值与列名进行比较。 Laravel
- 25. 将列与过程的值进行比较
- 26. 大熊猫 - 在字典中的列值与值进行比较
- 27. 将列表与字典进行比较以在python中创建新列表
- 28. 如何将列表的索引与浮点数进行比较?
- 29. 将字典的键与列表进行比较
- 30. 将两张表格与唯一的列匹配进行比较
http://stackoverflow.com/questions/878833/ – 2009-09-21 18:58:24