powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как починить этот код?
21 сообщений из 21, страница 1 из 1
Как починить этот код?
    #39705230
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет
Я задал вопрос на stackoverflow.
Но что то с ответами пока плохо.
Возможно, кто то среди местных экспертов знает как это починить?
Спасибо.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39705605
Т-Миронов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alew,

Это баг SqlClient нужно ждать пока выкатят фикс или ретраить, когда очевидно что не все записи вернулись.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39705625
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlewПривет
Я задал вопрос на stackoverflow.
Но что то с ответами пока плохо.
Возможно, кто то среди местных экспертов знает как это починить?
Спасибо.

Что означает это
"WHERE @@ROWCOUNT = 1 AND [Id] = @Id"?

Сколько записей вернет , если убрать
"WHERE [Id] = @Id"
?
...
Рейтинг: 0 / 0
Как починить этот код?
    #39705720
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kЧто означает это
"WHERE @@ROWCOUNT = 1 AND [Id] = @Id"?

Просто проверка что первый стейтмен успешно вставил запись. Если так, то второй делает выборку если нет то выборки не будет.
эквивалентно этому:

Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO [dbo].[IntegrationCommandLog] ([Id], [Content], [Topic])
VALUES ( @Id, @Content, @Topic);

if @@ROWCOUNT = 1 
    SELECT [OrderingKey], [RowVersion]
    FROM [dbo].[IntegrationCommandLog]
    WHERE [Id] = @Id
...
Рейтинг: 0 / 0
Как починить этот код?
    #39705756
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер256kЧто означает это
"WHERE @@ROWCOUNT = 1 AND [Id] = @Id"?

Просто проверка что первый стейтмен успешно вставил запись. Если так, то второй делает выборку если нет то выборки не будет.
эквивалентно этому:

Код: sql
1.
2.
3.
4.
5.
6.
7.
INSERT INTO [dbo].[IntegrationCommandLog] ([Id], [Content], [Topic])
VALUES ( @Id, @Content, @Topic);

if @@ROWCOUNT = 1 
    SELECT [OrderingKey], [RowVersion]
    FROM [dbo].[IntegrationCommandLog]
    WHERE [Id] = @Id



Там такого нет, а есть такое в вопросе:
Код: sql
1.
2.
3.
4.
5.
6.
string sql = @"SET NOCOUNT ON;
INSERT INTO [dbo].[IntegrationCommandLog] ([Id], [Content], [Topic])
VALUES ( @Id, @Content, @Topic);
SELECT [OrderingKey], [RowVersion]
FROM [dbo].[IntegrationCommandLog]
WHERE @@ROWCOUNT = 1 AND [Id] = @Id";



Я не могу сказать точно, как будет вести себя это утверждение, но вполне возможно, что вернется одна запись.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39705814
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kТам такого нет, а есть такое в вопросе:
я сказал что это эквивалент того что там, внимательно мой ответ перечитайте.

256kЯ не могу сказать точно, как будет вести себя это утверждение, но вполне возможно, что вернется одна запись.
А тупо попробовать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
use tempdb
go

create table dbo.test1 (
    Id int not null primary key
  , Data varchar(128) 
)
go

declare @Id int = 123
insert into dbo.test1 ( Id, Data )
values ( @id, 'data')
select *
from dbo.test1
where @@rowcount = 1 and Id = @Id
...
Рейтинг: 0 / 0
Как починить этот код?
    #39706090
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер256kТам такого нет, а есть такое в вопросе:
я сказал что это эквивалент того что там, внимательно мой ответ перечитайте.

256kЯ не могу сказать точно, как будет вести себя это утверждение, но вполне возможно, что вернется одна запись.
А тупо попробовать?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
use tempdb
go

create table dbo.test1 (
    Id int not null primary key
  , Data varchar(128) 
)
go

declare @Id int = 123
insert into dbo.test1 ( Id, Data )
values ( @id, 'data')
select *
from dbo.test1
where @@rowcount = 1 and Id = @Id



Я для начала тупо прочитал вопрос, который беспокоит юзера

Why Sql Server SELECT does not return all entries?

Какие записи он еще хочет видеть? таким запросом выдастся только одна запись

зы. интересно, зачем тупо использовать
Код: sql
1.
2.
3.
4.
use tempdb
go

create table dbo.test1 (



а не тупо это?
Код: sql
1.
create table #test1 (



спасиба тупо
...
Рейтинг: 0 / 0
Как починить этот код?
    #39706092
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256k Why Sql Server SELECT does not return all entries?

Какие записи он еще хочет видеть?ТС считает, что возвращваются не все строки, т.к. есть разрывы в последовательности OrderingKey.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39706155
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alewкак это починить?

не надо вам строить логику вашего приложения на предположении что identity всегда последовательный.

я позапускал ваш код, и такое поведение у меня воспроизводится, на новой базе, а если через какое-то время таблицу очистить и снова запустить приложение, то не воспроизводится....
что интересно пытался в serializable получать данные, но там тоже иногда проскакивают такие записи.
я не владею информацией как там это все внутри sql server устроено, но можно предположить что следующее identity получается до вставки в таблицу и вне транзакции. но в целом это не важно, в доках написано что могут быть пропуски - написано, и этого достаточно. ваш вопрос не зря минусонули там, т.к. то, что вы делаете не имеет практического смысла.

опишите лучше в другом посте вашу реальную задачу, что вам нужно сделать, и вам подскажут.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39706168
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закладывать на монотонно возрастающий идентити это последнее дело. Кеширование значений, откаты транзакций как минимум всё это сдвигает значение. Да и не предназначен он для этого.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709274
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, за ответы. Отвлекся немного, думал, при ответах будут уведомления на почту

Т-Миронов , почему вы думаете, что это баг клиета, а не спицифика самого сервера? Больше то похоже как раз на последнего.

Владимир Затуливетер , TaPaK
Даже не пытался закладываться на отсутствие реальных гэпов. Проблема то как раз в том, что фактически гэпов нет, а в ответе они есть. И попытка усились транзакции эффекта не дает.
Почему минусуют это отдельный вопрос, но, в данном случае, я вижу это по другому, минус бы в предыдущей версии вопроса, после чего я его уже полностью переписал и новая версия уже содержит в себе все что нужно, но при этом даунвойтер не соизволил пересмотреть свою оценку. Хотя вопрос вполне конкретный и проделанный ресерч приложен как в комментах советовали.

Я создал второй вопрос уже ближе к тому, что именно я хочу сделать, но там тоже глухо. И тоже минусуют, скорее всего тот товарищ, который рабита пытался посоветовать, хотя он явно очень узко на мир смотрит.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709275
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alew,

Минусуют потому что никто не понимает что же вы хотите/спрашиваете. Ну я так точно
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709288
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlewСпасибо, за ответы. Отвлекся немного, думал, при ответах будут уведомления на почту

Т-Миронов , почему вы думаете, что это баг клиета, а не спицифика самого сервера? Больше то похоже как раз на последнего.

Владимир Затуливетер , TaPaK
Даже не пытался закладываться на отсутствие реальных гэпов. Проблема то как раз в том, что фактически гэпов нет, а в ответе они есть. И попытка усились транзакции эффекта не дает.
Почему минусуют это отдельный вопрос, но, в данном случае, я вижу это по другому, минус бы в предыдущей версии вопроса, после чего я его уже полностью переписал и новая версия уже содержит в себе все что нужно, но при этом даунвойтер не соизволил пересмотреть свою оценку. Хотя вопрос вполне конкретный и проделанный ресерч приложен как в комментах советовали.

Я создал второй вопрос уже ближе к тому, что именно я хочу сделать, но там тоже глухо. И тоже минусуют, скорее всего тот товарищ, который рабита пытался посоветовать, хотя он явно очень узко на мир смотрит.

а чем Брокер не устаивает?
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709295
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alew Т-Миронов , почему вы думаете, что это баг клиета, а не спицифика самого сервера? Больше то похоже как раз на последнего.Специфика сервера возможна если бы в запросе не указывалось предложение order by. Поэтому, скорее всего, это специфика Dapper.

Если ваш проверочный запрос не показал наличия разрывов последовательности, то для начала измените свой тест:
1. Модифицируйте запрос
Код: sql
1.
SELECT *, case when OrderingKey > lag(OrderingKey) over (order by OrderingKey) + 1 then 1 else 0 end as GapFlag FROM dbo.IntegrationCommandLog WHERE OrderingKey > @OrderingKey ORDER BY OrderingKey;

2. В приложении проверяйте наличие значений GapFlag <> 0
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709376
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKAlew,

Минусуют потому что никто не понимает что же вы хотите/спрашиваете. Ну я так точно

Вот тут есть еще одна проблем, я задаю вполне конкретный вопрос и хочу получить ответ в строго заданных рамках, потому что так будет проще и быстрее. Если же ответов не будет, то тогда я задам следующий, более высокоуровневый вопрос. Вот ровно так было и в этом случае. В противном случае ответ не будет соответствовать тексту вопроса буквально. Периодически я сталкиваюсь этой проблемой, где мне в комментариях пишут, чтобы я озвучил более высокоуровневую проблему, но думаю, что тут надо комментарий минусовать, а не вопрос, потому что человек не знает как ответить на вопрос, но готов подумать как решить проблему на другом уровне. Я сам могу решить проблему на другом уровне, но об этом думать преждевременно, пока я получу или не получу ответ на текущий вопрос. Подозреваю, что 22 балла репутации намекают на джуна и люди хотят помочь из лучших побуждений, но зачем тогда минусовать?

256kа чем Брокер не устаивает?

Может и устраивает, я с ним раньше не сталкивался. Просто это более дорогое в плане затрат на реализацию решение, в идеале, хотелось бы обойтись тюнингом запроса. Хотя, как предложение вполне.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709390
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm

Проблема в том, что там есть еще одно поле, по которому приходится фильтровать и проверить наличие гэпов фактически невозможно. Я пока решил тем что перезапрашиваю данные повторно если их метка времени меньше пары секунд, в надежде что 2+ секундные данные уж точно в запрос попадут.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39709410
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlewПроблема в том, что там есть еще одно поле, по которому приходится фильтровать и проверить наличие гэпов фактически невозможно.Т.е. опубликованный тест и полученные результаты не соответствуют друг-другу?
...
Рейтинг: 0 / 0
Как починить этот код?
    #39711232
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

не уверен, что понял вопрос. Тест на отсутствие пропусков
Код: sql
1.
2.
3.
SELECT top 100 * FROM (SELECT *, rowid = ROW_NUMBER() OVER (ORDER BY OrderingKey) FROM [dbo].[IntegrationCommandLog]) l1
JOIN (SELECT *, rowid = ROW_NUMBER() OVER (ORDER BY OrderingKey) FROM [dbo].[IntegrationCommandLog]) l2 on l1.rowid + 1 = l2.rowid
WHERE l1.OrderingKey + 1 != l2.OrderingKey

говорит что пропусков нет, но он используется уже после, чтобы убедиться что те пропуски, которые были записаны в лог, в БД отсутствуют. То что вы предлагаете, поле для гэпа, не будет работать в моем случае, потому, что реальный запрос содержит фильтр и выборка будет не сплошной, т.о. ответ будет содержать гэпы, но это будут правильные гэпы.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39711305
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlewТо что вы предлагаете, поле для гэпа, не будет работать в моем случае, потому, что реальный запрос содержит фильтр и выборка будет не сплошной, т.о. ответ будет содержать гэпы, но это будут правильные гэпы.Давайте рассматривать не ваш случай, а то, что было опубликовано на стеке.

Вы утверждаете - результаты запроса с сервера возвращаются либо с нарушенным порядком, либо не полностью.
Как проверить отсутствие нарушений последовательности в результате запроса я уже показал.
Проверить сколько строк вернул запрос можно с помощью методов SqlConnection ResetStatistics/RetrieveStatistics

Проводить эти исследования или продолжить считать, что сервер над вами измывается, возвращая некорректные результаты - дело сугубо ваше.

Фрагмент
Код: sql
1.
2.
3.
4.
5.
6.
SET NOCOUNT ON;
INSERT INTO [dbo].[IntegrationCommandLog] ([Id], [Content], [Topic])
VALUES ( @Id, @Content, @Topic);
SELECT [OrderingKey], [RowVersion]
FROM [dbo].[IntegrationCommandLog]
WHERE @@ROWCOUNT = 1 AND [Id] = @Id

Вызывает вопросы.
Зачем там select? Насколько я вижу, это приводит к наличию в соединении недофетченного набора.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39713969
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

я применил ваши советы и получилось, что результаты GapFlag и проверка на уровне приложения полностью совпадают.
Статистика тоже совпадает. Получается что это специфика сервера.
...
Рейтинг: 0 / 0
Как починить этот код?
    #39714027
Alew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Селект в инсерте присутствует, чтобы обновлять сущность в приложении. Так делает entity framework для версионируемых сущностей.
Пробовал убрать селект, без влияния на результат.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как починить этот код?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]