我遇到了一个小问题。情况是:
我有一个MSSQL表,其中包含IDs
(int,identity,primarykey)和names
(字符串)。
这个表很大,所以我不想只为一个LINQ查询填充整个数据集。
我有一个搜索算法,它使用多个ID填充List<int>
。
我想使用以下代码在datagridview中加载匹配的行:
dataGridView1.DataSource = tbl_WorklistTableAdapter.GetDataByID(ids_here);
但我无法处理多个ID,只需一个。 The GetDataByID()
代码必须是这个(我认为):
SELECT [ID]
,[NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (@searchterm)
但WHERE ID IN
接受以逗号分隔的整数,例如1,2,3
。但@variable只是一个int。
我应该如何将字符串转换为整数?
谢谢你,抱歉不好。 :)
答案 0 :(得分:1)
在这种情况下,您需要更改sql,因此您需要在查询中为逗号分隔的id和apply条件生成一个临时表。
<强>如: - 强>
DECLARE @variables VARCHAR(200) = @searchterm -- Your Variable
CREATE TABLE #temp(ID NUMERIC) DECLARE @temp VARCHAR(200)
SET @temp = @variables WHILE LEN(@temp) > 0 BEGIN DECLARE @t1 VARCHAR(200)
IF CHARINDEX(',',@temp) > 0
BEGIN
SET @t1 = SUBSTRING(@temp,0,CHARINDEX(',',@temp))
INSERT INTO #TEMP SELECT @t1
SET @temp = SUBSTRING(@temp,CHARINDEX(',',@temp)+1,len(@temp))
END
ELSE
BEGIN
INSERT INTO #TEMP SELECT @temp
SET @temp = ''
END
END
SELECT [ID]
,[NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT ID FROM #temp)
答案 1 :(得分:0)
您可以使用内置功能SPLIT_STRING功能:
SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM SPLIT_STRING(@searchterm,','))
这仅在兼容级别130或更高版本上有效。
如果您使用的是旧版SQL Server,则可以遵循this answer,它定义了等效功能:
SELECT [ID], [NAME]
FROM [DataBase].[dbo].[tbl_Namelist]
WHERE ID IN (SELECT VALUE FROM fn_split_string(@searchterm,','))