Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите разобраться в QA нормально, с клиента - нет  [new]
zenik
Member

Откуда:
Сообщений: 100
MSSQL
Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)


Если выполнить запрос в QA, то все отрабатывает нормально. С клиента (1С, через ВК 1cpp, драйвер ODBC) обрабатываются не все данные (ниже).

Запрос вот такой (перехвачен профайлером):
EXECUTE UpdatePrice 100974,1,188.5
EXECUTE UpdatePrice 113476,1,253.5
EXECUTE UpdatePrice 113480,1,240.5
EXECUTE UpdatePrice 113475,1,214.5
EXECUTE UpdatePrice 109276,1,214.5
EXECUTE UpdatePrice 140508,1,234
EXECUTE UpdatePrice 113477,1,227.5
EXECUTE UpdatePrice 173300,1,214.5
EXECUTE UpdatePrice 117785,1,214.5
EXECUTE UpdatePrice 122741,1,234
EXECUTE UpdatePrice 174200,1,201.5
EXECUTE UpdatePrice 130310,1,221
EXECUTE UpdatePrice 151464,1,214.5
EXECUTE UpdatePrice 113484,1,201.5
EXECUTE UpdatePrice 113485,1,208
EXECUTE UpdatePrice 154110,1,201.5
EXECUTE UpdatePrice 127813,1,234
EXECUTE UpdatePrice 113473,1,208
EXECUTE UpdatePrice 114179,1,208
EXECUTE UpdatePrice 100978,1,201.5

ХП UpdatePrice выглядит вот так:
CREATE PROCEDURE [dbo].[UpdatePrice] ( @ArticleID int, @PriceSchemaID smallint, @Price numeric(20,2))
AS
BEGIN
	IF EXISTS (SELECT * FROM Price (NOLOCK) WHERE ArticleID = @ArticleID AND PriceSchemaID = @PriceSchemaID)
		UPDATE Price SET Price = @Price WHERE ArticleID = @ArticleID AND PriceSchemaID = @PriceSchemaID
	ELSE
		INSERT Price VALUES ( @ArticleID, @PriceSchemaID, @Price )

	DECLARE	@CashID SmallInt,
			@SectionID SmallInt,
			@Command varchar(50),
			@String varchar(500)

	DECLARE Cash_cursor INSENSITIVE CURSOR
		FOR SELECT c.ID,c.SectionID 
			FROM Cash AS c (NOLOCK), CashSection AS cs (NOLOCK)
			WHERE 
				c.SectionID = cs.ID AND 
				cs.PriceSchemaID = @PriceSchemaID AND
				Mode = 1 AND 
				c.isDel = 0
	OPEN Cash_cursor
	FETCH NEXT FROM Cash_cursor INTO @CashID,@SectionID
	WHILE @@FETCH_STATUS = 0 BEGIN
		SET @Command = '$$$AddQuantity'
		SET @String = dbo.fn_GetArticle( @CashID, @ArticleID, 0 )

		IF @String IS NOT NULL
			EXEC UpdateChange @CashID,'Article',@ArticleID,0,@Command,@String

		FETCH NEXT FROM Cash_cursor INTO @CashID,@SectionID
	END
	CLOSE Cash_cursor
	DEALLOCATE Cash_cursor
END

и UpdateChange:
CREATE PROCEDURE [dbo].[UpdateChange] (
	@ID smallint,
	@Type varchar(100),
	@D1 varchar(50) = 0,
	@D2 varchar(50) = 0,
	@Command varchar(50),
	@String varchar(500)
)

AS
BEGIN
	DECLARE @Priority smallint
	SET @Priority = dbo.fn_GetPriority(@Command)

	IF EXISTS (SELECT * FROM Change (NOLOCK) WHERE CashID = @ID AND Type = @Type AND D1 = @D1 AND D2 = @D2 AND DO = 0)
		UPDATE Change SET Priority = @Priority, Command = @Command, String = @String WHERE CashID = @ID AND Type = @Type AND D1 = @D1 AND D2 = @D2 AND DO = 0
	ELSE
		INSERT Change VALUES (@ID,@Type,@D1,@D2,0,@Priority,@Command,@String)
END

Смысл сего следующий, для каждой записи из Cash надо запись в Change (вставить или обновить существующие). Из QA запрос отрабатывает при любом количестве записей в Cash (пробовал для 30). С клиента: чем больше записей в Cash тем меньше записей попадает в Change для каждой записи Cash.
т.е. Если оставляем 1 запись в Cash - в Change 20 записей.
Если добавляем 2-ю запись в Cash, то в Change уже 18 записей для каждой Cash.
и т.д. В итоге для 30 записей в Cash всего 2 записи в Change для каждой записи в Cash.
Перед каждым запросом (приведен в самом начале), таблица Change очищалась.

Почему такое может происходить, и как с этим бороться?
28 авг 09, 09:08    [7589016]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в QA нормально, с клиента - нет  [new]
san_d
Member

Откуда: Киев
Сообщений: 60
set nocount on попробуйте в процедуру дописать
CREATE PROCEDURE [dbo].[UpdatePrice] ( @ArticleID int, @PriceSchemaID smallint, @Price numeric(20,2))
AS
BEGIN
 SET NOCOUNT ON
 ...
28 авг 09, 10:22    [7589192]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в QA нормально, с клиента - нет  [new]
zenik
Member

Откуда:
Сообщений: 100
Спасибо огромное. Помогло.

Но как это может влиять, непонятно... :(
28 авг 09, 10:35    [7589252]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в QA нормально, с клиента - нет  [new]
san_d
Member

Откуда: Киев
Сообщений: 60
zenik
Но как это может влиять, непонятно... :(

баг вроде как :) http://support.microsoft.com/kb/293901
28 авг 09, 11:10    [7589497]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить