Будет ли Cross Apply залог, но не ошибка в SQL Server? - PullRequest
1 голос
/ 19 июня 2010

Мы вставляем пару миллионов записей в таблицу сведений, данные для которой хранятся в основной таблице в формате CSV. Чтобы выполнить вставку, мы используем функцию перекрестного применения, которая, кажется, работает, если я делаю вставки одну за другой, но если я делаю вставку целиком, поступает только около 2/3 записей, и запрос просто останавливается. с успехом примерно через 3 с половиной часа.

Вот запрос вставки

   INSERT INTO DetailsTable(MasterTableID, DetailColumn1, DetailColumn2) 
   SELECT MasterTableID, DetailColumn1, DetailColumn2 FROM MasterTable
   CROSS APPLY [fn_CreateDetailData](MasterTableID, '§') 

Если я сделаю следующее для одной из записей, которая не будет вставлена, все будет работать нормально, и там запись будет вставлена ​​просто отлично

   INSERT INTO DetailsTable(MasterTableID, DetailColumn1, DetailColumn2) 
   SELECT MasterTableID, DetailColumn1, DetailColumn2 FROM MasterTable
   CROSS APPLY [fn_CreateDetailData](MasterTableID, '§') 
   WHERE MasterTableID = 12345

Из всего, что я когда-либо знал о SQL Server, в одной транзакции существует один оператор вставки, так что это либо все, либо ничего, но здесь это не так.

1 Ответ

2 голосов
/ 19 июня 2010

Это точно ваш код для SELECT?Вы пропустили какую-либо деталь, например, использование подсказок NOLOCK?NOLOCK известен тем, что вызывает загадочные пробелы в данных, см. Ранее пропущенные строки могут быть пропущены, если используется подсказка NOLOCK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...