我有查询在运行时动态生成我可能有一个或1000个项目在这里是查询
SELECT DISTINCT nss.SubmitId,CD.ControlName, nss.ItemName, nss.ItemValue,
nss.ExternalFile FROM (SELECT * FROM SubmitData AS sd WHERE ( sd.ItemName = @ItemName1 OR
sd.ItemName = @ItemName2 OR sd.ItemName = @ItemName3 OR sd.ItemName = @ItemName4 OR
sd.ItemName = @ItemName5 OR sd.ItemName = @ItemName6 OR sd.ItemName = @ItemName7 OR
sd.ItemName = @ItemName8 OR sd.ItemName = @ItemName9 OR sd.ItemName = @ItemName10 OR
sd.ItemName = @ItemName11 OR sd.ItemName = @ItemName12 OR sd.ItemName = @ItemName13 OR
sd.ItemName = @ItemName14 OR sd.ItemName = @ItemName15 OR sd.ItemName = @ItemName16 OR
sd.ItemName = @ItemName17 OR sd.ItemName = @ItemName18 OR sd.ItemName = @ItemName19 OR
sd.ItemName = @ItemName20 OR sd.ItemName = @ItemName21 OR sd.ItemName = @ItemName22 OR
sd.ItemName = @ItemName23 OR sd.ItemName = @ItemName24 OR sd.ItemName = @ItemName25 OR
sd.ItemName = @ItemName26 OR sd.ItemName = @ItemName27 OR sd.ItemName = @ItemName28 OR
sd.ItemName = @ItemName29 OR sd.ItemName = @ItemName30 OR sd.ItemName = @ItemName31 OR
sd.ItemName = @ItemName32 OR sd.ItemName = @ItemName33 OR sd.ItemName = @ItemName34 OR
sd.ItemName = @ItemName35 OR sd.ItemName = @ItemName36 OR sd.ItemName = @ItemName37 OR
sd.ItemName = @ItemName38 OR sd.ItemName = @ItemName39 OR sd.ItemName = @ItemName40 OR
sd.ItemName = @ItemName41 OR sd.ItemName = @ItemName42 OR sd.ItemName = @ItemName43 OR
sd.ItemName = @ItemName44 OR sd.ItemName = @ItemName45 OR sd.ItemName = @ItemName46 OR
sd.ItemName = @ItemName47 OR sd.ItemName = @ItemName48 OR sd.ItemName = @ItemName49 OR
sd.ItemName = @ItemName50 OR sd.ItemName = @ItemName51 OR sd.ItemName = @ItemName52 OR
sd.ItemName = @ItemName53 OR sd.ItemName = @ItemName54 OR sd.ItemName = @ItemName55 OR
sd.ItemName = @ItemName56 OR sd.ItemName = @ItemName57 OR sd.ItemName = @ItemName58 OR
sd.ItemName = @ItemName59 OR sd.ItemName = @ItemName60 OR sd.ItemName = @ItemName61 OR
sd.ItemName = @ItemName62 OR sd.ItemName = @ItemName63 OR sd.ItemName = @ItemName64 OR
sd.ItemName = @ItemName65 OR sd.ItemName = @ItemName66 OR sd.ItemName = @ItemName67 OR
sd.ItemName = @ItemName68 OR sd.ItemName = @ItemName69 OR sd.ItemName = @ItemName70 OR
sd.ItemName = @ItemName71 OR sd.ItemName = @ItemName72 OR sd.ItemName = @ItemName73 OR
sd.ItemName = @ItemName74 OR sd.ItemName = @ItemName75 OR sd.ItemName = @ItemName76 OR
sd.ItemName = @ItemName77 OR sd.ItemName = @ItemName78 OR sd.ItemName = @ItemName79 OR
sd.ItemName = @ItemName80 OR sd.ItemName = @ItemName81 OR sd.ItemName = @ItemName82 OR
sd.ItemName = @ItemName83 OR sd.ItemName = @ItemName84 OR sd.ItemName = @ItemName85 OR
sd.ItemName = @ItemName86 OR sd.ItemName = @ItemName87 OR sd.ItemName = @ItemName88 OR
sd.ItemName = @ItemName89 OR sd.ItemName = @ItemName90 OR sd.ItemName = @ItemName91 OR
sd.ItemName = @ItemName92 OR sd.ItemName = @ItemName93 OR sd.ItemName = @ItemName94 OR
sd.ItemName = @ItemName95 OR sd.ItemName = @ItemName96 OR sd.ItemName = @ItemName97 OR
sd.ItemName = @ItemName98 OR sd.ItemName = @ItemName99 OR sd.ItemName = @ItemName100 OR
sd.ItemName = @ItemName101 OR sd.ItemName = @ItemName102 OR sd.ItemName = @ItemName103 OR
sd.ItemName = @ItemName104 OR sd.ItemName = @ItemName105 OR sd.ItemName = @ItemName106 OR
sd.ItemName = @ItemName107 OR sd.ItemName = @ItemName108 OR sd.ItemName = @ItemName109 OR
sd.ItemName = @ItemName110 OR sd.ItemName = @ItemName111 OR sd.ItemName = @ItemName112 OR
sd.ItemName = @ItemName113 OR sd.ItemName = @ItemName114 OR sd.ItemName = @ItemName115 OR
sd.ItemName = @ItemName116 OR sd.ItemName = @ItemName117 OR sd.ItemName = @ItemName118 OR
sd.ItemName = @ItemName119 OR sd.ItemName = @ItemName120 OR sd.ItemName = @ItemName121 OR
sd.ItemName = @ItemName122 OR sd.ItemName = @ItemName123 OR sd.ItemName = @ItemName124 OR
sd.ItemName = @ItemName125 OR sd.ItemName = @ItemName126 OR sd.ItemName = @ItemName127 OR
sd.ItemName = @ItemName128 OR sd.ItemName = @ItemName129 OR sd.ItemName = @ItemName130 OR
sd.ItemName = @ItemName131 OR sd.ItemName = @ItemName132 OR sd.ItemName = @ItemName133 OR
sd.ItemName = @ItemName134 OR sd.ItemName = @ItemName135 OR sd.ItemName = @ItemName136 OR
sd.ItemName = @ItemName137 OR sd.ItemName = @ItemName138 OR sd.ItemName = @ItemName139 OR
sd.ItemName = @ItemName140 OR sd.ItemName = @ItemName141 OR sd.ItemName = @ItemName142 OR
sd.ItemName = @ItemName143 OR sd.ItemName = @ItemName144 OR sd.ItemName = @ItemName145 OR
sd.ItemName = @ItemName146 OR sd.ItemName = @ItemName147 OR sd.ItemName = @ItemName148 OR
sd.ItemName = @ItemName149 OR sd.ItemName = @ItemName150 OR sd.ItemName = @ItemName151 OR
sd.ItemName = @ItemName152 OR sd.ItemName = @ItemName153 OR sd.ItemName = @ItemName154 OR
sd.ItemName = @ItemName155 OR sd.ItemName = @ItemName156 OR sd.ItemName = @ItemName157 OR
sd.ItemName = @ItemName158 OR sd.ItemName = @ItemName159 OR sd.ItemName = @ItemName160 OR
sd.ItemName = @ItemName161 OR sd.ItemName = @ItemName162 OR sd.ItemName = @ItemName163 OR
sd.ItemName = @ItemName164 OR sd.ItemName = @ItemName165 OR sd.ItemName = @ItemName166 OR
sd.ItemName = @ItemName167 OR sd.ItemName = @ItemName168 OR sd.ItemName = @ItemName169 OR
sd.ItemName = @ItemName170 OR sd.ItemName = @ItemName171 OR sd.ItemName = @ItemName172 OR
sd.ItemName = @ItemName173 OR sd.ItemName = @ItemName174 OR sd.ItemName = @ItemName175 OR
sd.ItemName = @ItemName176 OR sd.ItemName = @ItemName177 OR sd.ItemName = @ItemName178 OR
sd.ItemName = @ItemName179 OR sd.ItemName = @ItemName180 OR sd.ItemName = @ItemName181 OR
sd.ItemName = @ItemName182 OR sd.ItemName = @ItemName183 OR sd.ItemName = @ItemName184 OR
sd.ItemName = @ItemName185 OR sd.ItemName = @ItemName186 OR sd.ItemName = @ItemName187 OR
sd.ItemName = @ItemName188 OR sd.ItemName = @ItemName189 OR sd.ItemName = @ItemName190 OR
sd.ItemName = @ItemName191 OR sd.ItemName = @ItemName192 OR sd.ItemName = @ItemName193 OR
sd.ItemName = @ItemName194 OR sd.ItemName = @ItemName195 OR sd.ItemName = @ItemName196 OR
sd.ItemName = @ItemName197 OR sd.ItemName = @ItemName198 OR sd.ItemName = @ItemName199 OR
sd.ItemName = @ItemName200 OR sd.ItemName = @ItemName201 OR sd.ItemName = @ItemName202 OR
sd.ItemName = @ItemName203 OR sd.ItemName = @ItemName204 OR sd.ItemName = @ItemName205 )
AND sd.SubmitId='20140723210127429') AS nss LEFT JOIN CSVData AS CD ON nss.ItemName =
CD.ControlKey WHERE CD.FileId = @FileId
正如你可以看到itemName的很多参数,根据用户的选择可以b 10或1000,当我执行这个查询它给我复杂查询异常,有没有其他方法我可以在MS ACCSS2007中运行相同的查询 以下是生成此查询的代码
cmd.CommandText = String.Format(@"SELECT DISTINCT nss.SubmitId,CD.ControlName, nss.ItemName, nss.ItemValue, nss.ExternalFile FROM (SELECT * FROM SubmitData AS sd WHERE ({0}) AND sd.SubmitId='" + sid + "') AS nss LEFT JOIN CSVData AS CD ON nss.ItemName = CD.ControlKey WHERE CD.FileId = @FileId", strItemsQuery2);
intItemsIndex2 = 1;
int length= sheet.g.Count();
foreach (var gItems in sheet.g)
{
cmd.Parameters.AddWithValue("@ItemName" + intItemsIndex2, gItems[0]);
intItemsIndex2++;
}
cmd.Parameters.AddWithValue("@FileId", FileId);
OleDbDataReader reader4 = cmd.ExecuteReader();
答案 0 :(得分:1)
您可以使用“IN”子句。我想它最多可以接受1000个值。
SELECT DISTINCT nss.SubmitId,CD.ControlName, nss.ItemName, nss.ItemValue, nss.ExternalFile
FROM
( SELECT * FROM SubmitData AS sd
WHERE sd.ItemName IN (@ItemName1, @ItemName2, @ItemName3, @ItemName4, @ItemName5, ................... up to 1000 values)
AND sd.SubmitId='20140723210127429'
) AS nss
LEFT JOIN CSVData AS CD ON nss.ItemName = CD.ControlKey WHERE CD.FileId = @FileId