我可以用bcp指定输入sql文件吗?

Leg*_*end 13 sql sql-server bcp sql-server-2008

使用bcp时,如何使用长查询指定输入sql文件?我尝试使用该-i选项,但它一直抱怨命令行错误,没有额外的信息.这可能吗?

Lar*_*vid 11

我今天遇到了这个问题,并找到了一个方便的解决方法,至少在临时情况下.

具有连接权限的任何用户都可以创建临时表.这意味着您还可以创建GLOBAL临时表.

只需使用带有全局临时表的SELECT ... INTO在企业管理器(或sql cmd或其他)中运行查询,例如

SELECT * 
INTO ##mytemptable
FROM SomeTable 
WHERE [massive where clause, for example] 
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用简单的BCP查询中的临时表

SELECT * FROM ##mytemptable
Run Code Online (Sandbox Code Playgroud)

然后通过企业管理器删除临时表

DROP TABLE ##mytemptable
Run Code Online (Sandbox Code Playgroud)


Raf*_*sco 6

我用其他方法解决了这个问题。

我创建了一个批处理文件,该文件读取文件并通过bcp命令发送您的内容。看到:

@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
Run Code Online (Sandbox Code Playgroud)

该脚本收到两个参数:

  1. 有查询的文件名;
  2. 导出数据的文件名;

在cmd中执行如下脚本: export-query.bat query.sql export.txt

希望对您有所帮助。


Tho*_*ena 5

就我而言,BCP实用程序仅支持直接写入命令行的Transact-SQL查询。例如:

bcp“从AdventureWorks.Sales.Currency中选择名称” queryout Currency.Name.dat -T -c

根据其引用,“-i”选项:

指定响应文件的名称,其中包含使用交互方式(未指定-n,-c,-w或-N)执行批量复制时对每个数据字段的命令提示符问题的响应。

请注意,它与sqlcmd实用程序 “ -i”选项不同:

标识包含一批SQL语句或存储过程的文件。可以指定多个文件,这些文件将按顺序读取和处理(...)

  • 当我遇到过长的BCP查询时,我们求助于在源上存储视图。然后,我们的BCP查询可以简单地是“从[VIEW]中选择x,y,z” (4认同)