ВЫБЕРИТЕ * дублирование результатов таблицы, но выбор каждого поля не приводит

#sql #sql-server #duplicates #ssms #ibm-midrange

#sql #sql-сервер #дублирует #ssms #ibm-средний уровень

Вопрос:

В моем офисе работает сервер AS400, который я регулярно запрашиваю для ежедневных задач. У нас есть файл данных из 200 строк, который вызывает у нас проблему, которую я никогда раньше не видел.

При выполнении приведенного ниже запроса в SSMS он выдает 400 строк (дублируя каждую строку в файле), но также отказывается сортировать результаты в любой форме предложения «упорядочить по». При запуске одного и того же SQL внутри AS400 он возвращает то, что вы ожидаете, 200 строк, которые можно сортировать по своему усмотрению.

 execute('
select * from lib.file
') at as400
 

На мой взгляд, это даже не самая странная часть. При запросе одного и того же файла, но с явным указанием каждого поля (например: выберите field1, field2, …) SSMS возвращает 200 строк и позволяет мне сортировать, как мне хотелось бы.

Кто-нибудь видел подобное поведение? В чем разница в выполнении между SELECT * и SELECT (все поля)?

Комментарии:

1. Нет никакой разницы в количестве возвращаемых строк. Происходит что-то еще.

2. При EXEC ... AT этом SQL Server зависит от того, что выдает удаленный сервер и драйвер базы данных при передаче запроса. В любом случае SSMS почти наверняка является отвлекающим маневром; это всего лишь интерфейс. Вы можете попробовать то же самое sqlcmd для подтверждения.

3. вы уверены as400 , что связанный сервер указывает на тот же сервер, на котором вы запускаете запрос напрямую? для меня это было бы единственным

4. да, происходит что-то еще. Что вы делаете в SSMS после execute( ) at ...

5. @eshirvana да, я уверен, что он указывает непосредственно на тот же сервер. Я использовал SSMS для запроса нашего AS400 уже 2 года без каких-либо сбоев.