Can I specify an input sql file with bcp?

依然范特西╮ 提交于 2019-11-30 23:18:36

问题


How can I specify an input sql file with a long query when using bcp? I tried using the -i option but it keeps complaining about a command-line error with no extra information. Is this possible?


回答1:


As far as I'm concerned the BCP utility only supports Transact-SQL queries directly written to the command line. Ex:

bcp "SELECT Name FROM AdventureWorks.Sales.Currency" queryout Currency.Name.dat -T -c

According to its reference the "-i" option:

Specifies the name of a response file, containing the responses to the command prompt questions for each data field when a bulk copy is being performed using interactive mode (-n, -c, -w, or -N not specified).

Notice that it differs from the sqlcmd Utility "-i" option:

Identifies the file that contains a batch of SQL statements or stored procedures. Multiple files may be specified that will be read and processed in order (...)




回答2:


I had this problem today and found a convenient workaround, at least in an ad-hoc situation.

Temporary tables can be created by any user with connect permissions. This means you can also create GLOBAL temporary tables.

Just run your query in enterprise manager (or sql cmd or whatever) using SELECT ...INTO with a global temporary table e.g.

SELECT * 
INTO ##mytemptable
FROM SomeTable 
WHERE [massive where clause, for example] 

You can then use the temporary table in the BCP query with a simple

SELECT * FROM ##mytemptable

Then drop the temp table through enterprise manager

DROP TABLE ##mytemptable



回答3:


I did other way for fix that.

I create a batch file which read a file and send your content in bcp command. See:

@ECHO off

SETLOCAL EnableDelayedExpansion

SET queryFile=%1
SET outFileName=%2

FOR /F "delims=" %%i IN (%queryFile%) DO SET join=!join! %%i

ECHO %join%

bcp "%join%" queryout %outFileName% /S.\SQLE_CAESAR /d /c /t"|" /T

That script receive two parameters:

  1. Filename which has a query;
  2. Filename for export data;

Execute a script in cmd like that: export-query.bat query.sql export.txt

I hope helped.




回答4:


try :

query=$( cat < /file.sql )
export query
bcp "${query}" queryout /home/file.csv



回答5:


Multi-line queries can be given to bcp easily using powershell:

PS> $query = @'
    select * 
    from <table>
'@
PS> bcp $query queryout <outfile> -d <database> -T -S <server> -c



回答6:


I had face same issue, may not be a very good approach. However, I did something like the following

bcp "declare @query nvarchar(max)  set @query = (SELECT * FROM OPENROWSET(BULK 'F:\tasks\report_v2.sql', SINGLE_CLOB) AS Contents) exec sp_executesql @query" queryout %outFileName%  /c /C RAW -S . -U sa -P 123 -d blog /T

And I must say, if you use like global temp table then global temp table is dropped itself of after query executed. you can't use this at some situations



来源:https://stackoverflow.com/questions/10568975/can-i-specify-an-input-sql-file-with-bcp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!