У меня есть несколько встроенных операторов SQL с некоторыми массивами и циклами if.Я хочу изменить их все в одну хранимую процедуру в SQL Server 2005. Поскольку я изучаю SQL, я понятия не имею, как это следует делать с массивами и циклами if.Можно ли отправлять массивы в хранимые процессы или есть какое-то другое решение?
См. Код, который я собираюсь изменить в SP.Заранее спасибо !!
public bool TempUpdateMerchantCategories(long LocationID, ArrayList CategoryList, ArrayList ImageData)
{
try
{
int j = 0;
bool hasImage = false;
string previousPID = string.Empty;
bool isFirstPID = true;
int numberOfSubCategories = 3;
int pIDCount = 0;
foreach (string data in CategoryList)
{
string pID = data.Split(',')[0];
if (isFirstPID)
{
isFirstPID = false;
previousPID = pID;
pIDCount++;
}
else
{
if (pID != previousPID)
{
previousPID = pID;
pIDCount++;
}
}
}
ArrayList stepsThresholdList = new ArrayList();
if (pIDCount > 1)
for (int k = 1; k < pIDCount; k++)
{
stepsThresholdList.Add(k * numberOfSubCategories);
}
if (CategoryList == null || CategoryList.Count == 0) return true;
SqlParameter[] parameters = new SqlParameter[]
{
new SqlParameter("@LocationID", LocationID)
};
//SqlHelper.ExecuteNonQuery(DbConnString, System.Data.CommandType.StoredProcedure, "TempMerchant_Location_Category", parameters);
string commandText = String.Format("DELETE FROM [TempMerchant_Location_Category] WHERE locationid = @LocationID");
Debug.Write(commandText);
SqlHelper.ExecuteNonQuery(DbConnString, CommandType.Text, commandText, parameters);
for (int i = 0; i < CategoryList.Count; i++)
{
if (ImageData.Count > 0 && j < ImageData.Count)
{
string imageID = ImageData[j].ToString().Split(',')[0];
string primaryID = ImageData[j].ToString().Split(',')[1];
if (primaryID == CategoryList[i].ToString().Split(',')[0])
if (imageID != "IsDefault")
hasImage = true;
}
if (!hasImage)
{
parameters = new SqlParameter[]
{
new SqlParameter("@LocationID", LocationID),
new SqlParameter("@PrimaryID", Convert.ToInt32(CategoryList[i].ToString().Split(',')[0])),
new SqlParameter("@SecondaryID", Convert.ToInt32(CategoryList[i].ToString().Split(',')[1]))
};
//SqlHelper.ExecuteNonQuery(DbConnString, System.Data.CommandType.StoredProcedure, "TempMerchant_Location_Category", parameters);
commandText = String.Format("INSERT INTO [dbo].[TempMerchant_Location_Category] ([LocationID],[PrimaryID],[SecondaryID]) VALUES (@LocationID,@PrimaryID,@SecondaryID)");
}
else
{
parameters = new SqlParameter[]
{
new SqlParameter("@LocationID", LocationID),
new SqlParameter("@PrimaryID", Convert.ToInt32(CategoryList[i].ToString().Split(',')[0])),
new SqlParameter("@SecondaryID", Convert.ToInt32(CategoryList[i].ToString().Split(',')[1])),
new SqlParameter("@ImageID", Convert.ToInt64(ImageData[j].ToString().Split(',')[0]))
};
// SqlHelper.ExecuteNonQuery(DbConnString, System.Data.CommandType.StoredProcedure, "TempMerchant_Location_Category", parameters);
commandText = String.Format("INSERT INTO [dbo].[TempMerchant_Location_Category] ([LocationID],[PrimaryID],[SecondaryID],[ImageID]) VALUES (@LocationID,@PrimaryID,@SecondaryID,@ImageID)");
}
if (stepsThresholdList.Count > 0 && j < stepsThresholdList.Count)
if (i == (Convert.ToInt32(stepsThresholdList[j]) - 1))
j++;
Debug.Write(commandText);
SqlHelper.ExecuteNonQuery(DbConnString, CommandType.Text, commandText, parameters);
}
return true;
}
catch (Exception ex)
{
LogError("Error Occurred When Updating TempMerchant Ctegories: LocationID:" + LocationID.ToString(), ex);
return false;
}
}