bcp: Экспорт SQL-запроса в файл

use ZKZS

go

declare @query nvarchar(300) = '"select Id, KodofDeputat, KodofCommittee, DateofIncorporation, DateofWithdrawal  from ZKZS.dbo.MemberofCommittee
 join ZKZS.dbo.AttendanceInSession
  on MemberofCommittee.Id = AttendanceInSession.MemberCode
  join ZKZS.dbo.SessionofComitet on Code = SessionCode
where TheDate > convert(date, '/2018-12-31/') "';

bcp @query queryout 'C:\Users\anvar\OneDrive\Базы Данных\Курсовая\Импорт и экспорт данных\Экспорт ЧК в файл.csv'
-d ZKZS
-t ;
-k
-N
-T
-S ANVAR\SQLEXPRESS
CHECK_CONSTRAINT
TABLOCK

ОШИБКА! Как быть? Подчеркивает слово bcp Сообщение 102, уровень 15, состояние 1, строка 11 Неправильный синтаксис около конструкции "bdp".

Время выполнения: 2020-09-06T20:09:36.8496020+03:00


Ответы (1 шт):

Автор решения: Yitzhak Khabinsky

bcp.exe является утилитой командной строки. Запустить ее непосредственно в SSMS невозможно.

Вот полный пример того, как запустить bcp в SSMS. Просто измените что необходимо для ваших нужд.

SQL

/*
-T tells BCP to use Windows Authentication to connect to SQL Server. It will operate as the user who's running the command.
-U <login_id> -P <password> tells BCP to use SQL Server account while connecting to SQL Server.
*/
DECLARE @SQLCmd VARCHAR(8000)
   , @outputFileName VARCHAR(256) = 'e:\Temp\SSIS_help15.xml'
   , @bcp VARCHAR(256) = 'c:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\bcp.exe'
   , @SQL VARCHAR(2048) = 'SET NOCOUNT ON; SELECT XMLCol FROM tempdb.dbo.T1 WHERE ID = 1;'
   , @tcpPort VARCHAR(10) = '1433'
   , @WindowsAuth BIT = 1   -- 1 is for Windows Authentication, 0 is for SQL Server Authentication
   , @loginID VARCHAR(100) = 'loginID'
   , @password VARCHAR(100) = 'password'
   , @serverName VARCHAR(100) = 'SPACESHIP';

-- /B "WindowTitle" parameters produce output in the SSSMS !!!
SET @SQLCmd = 'START /B "WindowTitle" "' + @bcp + '"' 
            + ' "' + @SQL + '"' 
            + ' queryout "' + @outputFileName + '"'
            --+ IIF(@WindowsAuth = 1, ' -T', ' -U '+ @loginID + ' -P ' + @password)
            + CASE WHEN @WindowsAuth = 1 THEN ' -T'
               ELSE ' -U '+ @loginID + ' -P ' + @password
               END
            + ' -c -C 65001 -a 32768'
            + ' -S "' + @serverName + ',' + @tcpPort + '"';

-- just to see it
SELECT @SQLCmd AS [Command to execute];

-- create file on the file system
EXECUTE master.sys.xp_cmdshell @SQLCmd;
→ Ссылка