2015-05-20 4 views
-1

Я застрял в проблеме, для которой я не могу найти причину или решение.Экспорт в Excel с SQL Server

Я запускаю SQL-скрипт для экспорта некоторых данных на лист Excel. На другом конце есть приложение, которое считывает и обрабатывает лист Excel.

Проблема: заголовки столбцов отображаются внизу, и приложение ожидает, что они будут в верхнем ряду. Я не могу изменить функционирование приложения.

Это прекрасно работало в SQL 2005, но мы недавно обновились до SQL 2012, и это началось.

Я не нашел ничего в Интернете, чтобы решить эту проблему.

Это SQL скрипт, который я уверен, выполнение

SELECT 
    @columnNames = COALESCE(@columnNames + ',', '') + '['+ column_name + ']', 
    @columnConvert = COALESCE(@columnConvert + ',', '') + 'convert(nvarchar(4000),' 
    + '['+ column_name + ']' + 
    case 
     when data_type in ('datetime', 'smalldatetime') then ',121' 
     when data_type in ('numeric', 'decimal') then ',128' 
     when data_type in ('float', 'real', 'money', 'smallmoney') then ',2' 
     when data_type in ('datetime', 'smalldatetime') then ',120' 
     else '' 
    end + ') as ' + '['+ column_name + ']' 
FROM tempdb.INFORMATION_SCHEMA.Columns 
WHERE table_name = '##TempExportData' 

-- execute select query to insert data and column names into new temp table 
SELECT @sql = 'select ' + @columnNames + ' into ##TempExportData2 from (select ' + @columnConvert + ', ''2'' as [temp##SortID] from ##TempExportData union all select ''' + replace(replace(replace(@columnNames, ',', ''', '''),'[',''),']','') + ''', ''1'') t order by [temp##SortID]' 
exec (@sql) 

-- build full BCP query 
DECLARE @bcpCommand VARCHAR(8000) 
SET @bcpCommand = 'bcp " SELECT * from ##TempExportData2" queryout' 
SET @bcpCommand = @bcpCommand + ' ' + @fullFileName + ' -T -w -S' + @serverInstance 

EXEC master..xp_cmdshell @bcpCommand 

Где TempExportData2 держит данные, которые вместе с заголовками столбцов

+1

Если вы * запускаете SQL-скрипт *, который вызывает эту проблему, и вы не показываете нам, что * SQL-скрипт *, как вы ожидаете от нас отладки для вас? Мы не можем определить проблему с кодом, который мы не видим. Мне очень маловероятно, что переход с SQL 2005 на 2012 год привел к тому, что заголовки столбцов перемещались сверху вниз, независимо от того, что делает скрипт, и мне обязательно нужно будет увидеть сценарий SQL, который вызвал эту проблему. –

+0

Я добавил вопрос к вопросу. Он работал все отлично за день до того, как мы обновились до SQL 2012, и если я снова запустил запрос в старом экземпляре SQL 2005, он будет работать нормально. Но в 2012 году это просто испортило это. – savvyBrar

+0

@KenWhite делает этот запрос сейчас? – savvyBrar

ответ

0

Я думаю, что я понимаю проблему: Вы используете order by в select into вместо из итогового select.

Вы должны знать, что данные внутри таблиц считаются unorderd и Sql Server (и любой другой СУБД я знаю, на самом деле) не гарантирует порядок строк, выбранных если select заявление не содержит order by положения.

Для этого, вы должны добавить [temp##SortID] столбец в таблицу ##TempExportData2 и использовать его для сортировки последнего select заявления:

SET @bcpCommand = 'bcp " SELECT * from ##TempExportData2 ORDER BY [temp##SortID]" queryout' 

Поскольку вам не нужен этот столбец в выходном запросе, так что вы можете для указания имен столбцов в этом предложении select. Однако, если это не наносит ущерба вашему приложению, которое читает файл excel или данные, которые он производит, я бы предложил сохранить select *, чтобы сделать запрос более читаемым.

Смежные вопросы