Stored procedure med brug af 'IN' function
Jeg ønsker at udtrække alle rækker med værdierne IN (100,101,102,103) via en stored procedure.Dog har jeg lidt problemer med at konvertere til den korrekte type når jeg kalder. Jeg har en ArrayList af Id'er som jeg laver om til en string vha. StringBuilder. Den indsætter jeg så i en variabel til stored procedure som nedenstående:
****************************************************
StringBuilder structureIds = new StringBuilder();
for(int i=0;i<nodesId.Count;i++)
{
structureIds.Append(nodesId[i].ToString());
structureIds.Append(",");
}
structureIds.Append("0");
string langCode = "DA";
DataTable toReturn = CreateDataTable();
SqlConnection conn = new SqlConnection(connStr);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand("LoadTreeViewNodes", conn);
adapter.SelectCommand.Parameters.Add("@LanguageKey", SqlDbType.VarChar).Value = langCode;
adapter.SelectCommand.Parameters.Add("@StructuresID", SqlDbType.VarChar).Value = structureIds.ToString();
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
******************************************************
Min SP ser ud som følger:
******************************************************
CREATE PROCEDURE LoadTreeViewNodes
@LanguageKey char(2),
@StructuresID varchar
AS
SET NOCOUNT ON
SELECT Structure.StructureID as [Key], Structure.Parent as Parent, KeyValue.[key] as KeyValueKey, KeyValue.[Value] as [Text]
FROM Structure INNER JOIN
KeyValue ON Structure.StructureID = KeyValue.StructureID OR Structure.ReferenceStructureID = KeyValue.StructureID
WHERE (KeyValue.[Key] = 'Caption'+@LanguageKey) AND (Structure.ProductionState = 0) AND (Structure.StructureID in (@StructuresID))
ORDER BY Structure.Parent, [Key]
GO
******************************************************
SP returnerer ingenting og fejler ikke. Mit bud er at @StructuresID kommer ind som "101,102,103" men den skal komme ind som 101,102,103 - altså uden gåseøjne for at SP kan forstå den.
Hvordan skal strengen formateres for at SP forstår den korrekt?