У меня есть хранимая процедура, которая в настоящее время выглядит следующим образом:
create procedure zsp_updateTyp5Graph
(
@DayList nvarchar(1000),
@Sales int,
@SearchedUserId int
)
as
update SearchedUserGraphData
set SalesForDay=@Sales
where Day in (SELECT * FROM dbo.SplitString(@DayList)) and SearchedUserId=@SearchedUserId
Параметр daylist выглядит следующим образом:
0,1,2,3,4,5,6
В моей таблице SearchedUserGraphData есть два столбца и 7 записей (7 дней), которые необходимо обновить. Например:
Day Sales
0 5
1 6
2 4
3 3
4 7
5 9
6 11
Я "частично" решил это, передав список дней ... Но я не могу выяснить, как я могу связать этот параметр @DayList с данными о продажах ...
У меня есть функция SplitString, которую я создал, и она выглядит следующим образом для сопоставления записей в БД:
ALTER FUNCTION [dbo].[splitstring] ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
Теперь проблема в том, что мне нужно каким-то образом передать из моего приложения на C # объединенный список Дней и их соответствующих продаж, а затем обновить записи сразу, не вызывая процедуру 7 раз, чтобы обновить 7 записей (что было бы катастрофическим с точки зрения производительности в моих глазах) ...
Может кто-нибудь помочь мне с этим?
P.S. Ребята, "лучшая" идея, которую я получаю, это:
Параметр daylist выглядит следующим образом:
0,1,2,3,4,5,6
And then sales:
11,22,44,55,66,77,88
Так я могу передать параметры продаж и дней ... Но что тогда? Я не могу знать, какая распродажа соответствует какому дню ...
Я мог бы сформировать строку словарь-пара ключей в моем приложении на C #, например:
{ Day: 1 Sales: 44, Day: 2 Sales: 55 }
это то, как я мог сформировать строку .. Но тогда мне нужно разбить эту строку в MSSQL, чтобы соответствовать => день 1 => обновить с продажами 44 ...