Поместите SELECT в файл .csv - PullRequest
0 голосов
/ 21 мая 2019

Я использую этот код для создания файла .csv, но ничего не происходит.

DECLARE @csvFileName varchar(50)
    DECLARE @SelectOut varchar(8000)

    SET @csvFileName = 'D:\csv Files\' + CAST(year(SYSDATETIME()) AS VARCHAR) +  CAST(month(SYSDATETIME()) AS VARCHAR) + 
                           CAST(day(SYSDATETIME()) AS VARCHAR) + 'IninUsers.csv'

    SET @SelectOut = 'BCP "SELECT DISTINCT u.firstName,u.lastName,wc.name,tw.dateTimeFrom,tw.dateTimeTo                         
                            FROM TA_WhcAssigned tw
                            INNER JOIN TA_Whc wc
                            ON tw.whcid=wc.id
                            INNER JOIN users u
                            ON u.pin = tw.pin
                            INNER JOIN DepartmentsAdmin da
                            ON da.pin = u.pin
                            INNER JOIN Departments d
                            ON da.departmentId = d.parent  
                            WHERE  (year(tw.dateTimeFrom)=2019 or year(tw.dateTimeFrom) = 2018) 
                            ORDER BY dateTimeFrom DESC " queryout ' + @csvFileName + ' -c -T'   



    EXEC xp_cmdshell @SelectOut   

Все, что я получаю, это как использовать синтаксис bcp:

введите описание изображенияздесь

1 Ответ

0 голосов
/ 22 мая 2019

Я решил свою проблему. Одна строка BCP, а также еще немного кода для получение столбцов.

Если кому-то интересно, вот полный код:

ОБЪЯВИТЬ @csvFileName varchar (50) ОБЪЯВИТЬ @SelectOut varchar (8000) ОБЪЯВИТЬ @sql varchar (8000) ЗАЯВИТЬ @sqlLine varchar (8000)

SET @ sql = 'ВЫБЕРИТЕ DISTINCT приведения (u.pin как varchar (50)) pin, приведения (u.firstName как varchar (50)) firstname, приведение (u.lastName как varchar (50)) фамилия, приведение (wc.name как varchar (50)) имя, replace (convert (varchar (50), tw.dateTimeFrom, 103), '' / '', ''. '') + '' '' + convert (nvarchar, tw.dateTimeFrom, 8) dateTimeFrom, replace (convert (varchar (50), tw.dateTimeTo, 103), '' / '', ''. '') + '' '' '+ convert (nvarchar, tw.dateTimeTo, 8) dateTimeTo FROM TA_WhcAssigned tw INNER JOIN TA_Whc wc ON tw.whcid = wc.id INNER JOIN пользователи u ON u.pin = tw.pin ВНУТРЕННЕЕ ПРИСОЕДИНЕНИЕ ON da.pin = u.pin ВНУТРЕННЕЕ СОЕДИНЕНИЕ Отделы d ON da.departmentId = d.parent
ГДЕ (год (tw.dateTimeFrom) = 2019 или год (tw.dateTimeFrom) = 2018) "'

SET @sqlLine = ЗАМЕНА (ЗАМЕНА (@ sql, CHAR (13), ''), CHAR (10), '')

SET @csvFileName = '"D: \ csv Files \' + CAST (год (SYSDATETIME ()) как VARCHAR) + CAST (месяц (SYSDATETIME ()) как VARCHAR) + CAST (день (SYSDATETIME ()) как VARCHAR) + 'IninUsers.csv "'

SET @SelectOut = «BCP» выбрать «Pin», «Имя», «Фамилия», «Имя», «Дата от», «Дата до» объединение всех '+ @sqlLine +' queryout '+ @csvFileName +' -c -t, -T -S "'+ @@ servername +'" -d "BoneIDa2" '

EXEC xp_cmdshell @SelectOut

Единственная проблема, которая остается, - создать значения через запятую csv - так это UTF-8, а не MS-DOS. Потому что у меня есть специальные символы, которые представлены неправильно.

...