Windows批处理文件中的SQL语句

时间:2008-12-23 19:35:24

标签: sql batch-file

有没有办法让Windows批处理文件直接输入SQL语句而不调用脚本?我希望批处理文件登录到SQL,然后直接输入语句。

编辑:我正在使用Oracle v10g

7 个答案:

答案 0 :(得分:3)

对于单个命令,您可以使用此技巧:

echo select * from dual; | sqlplus user/pw@db

答案 1 :(得分:3)

要在SQL Server 2005/2008上运行某些东西,可以使用sqlcmd命令行实用程序。 sqlcmd -h打印开关列表。

答案 2 :(得分:2)

简答:否。批处理文件本身无法做到这一点。

答案很长:您可能会接近,具体取决于您使用的数据库服务器类型以及命令行客户端提供的功能。

您使用的是哪种数据库服务器? Oracle,mySql,Sybase,Microsoft,Terradata,???

例如,对于Sybase数据库,您可以使用isql命令行客户端从批处理文件运行:

isql -S server -D database -U user -P password -i script

答案 3 :(得分:1)

您可以使用sqlcmd(对于sql server)或来自System.Data.Odbc.OdbcCommandpowershell

答案 4 :(得分:0)

outwit tool suite的odbc命令允许您在已定义适当ODBC数据源的任何数据库上运行select语句。

答案 5 :(得分:0)

您可以使用http://tekkies.co.uk/go/runsqloledb

e.g。 RunSQLOLEDB“Provider = SQLOLEDB; Data Source =(local); ...”“SELECT GetDate()” 要么 RunSQLOLEDB @ ConnectionString.txt @ Query.sql

答案 6 :(得分:0)

以下是MSSQL的粗略示例脚本,可以为Oracle修改:

@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
:: batch file for sql query
SET STARTDATE=20101010
SET ENDDATE=20111109
SET AGENCYNAME=Agency
SET DBNAME=AccidentDB

SET SQLSTRING=SELECT Acc.INC_ID,^
 Veh.MAKE, Veh.MODEL, Veh.LIC_NUM^
 FROM Acc,^
 lnk_Acc_Veh, Veh^
 WHERE     (INC_NUM LIKE '20115000%')^
 AND lnk_Acc_Veh.link_id=Veh.key^
 AND lnk_Acc_Veh.link_id=Acc.key^
 AND Acc.date ^> '%STARTDATE%' OR Acc.date ^< '%ENDDATE%';

CLS
@ECHO.
@ECHO.
@ECHO DBNAME is %DBNAME%
@ECHO.
@ECHO SQLSTRING is "!SQLSTRING!"
@ECHO.
@ECHO ------------------------------------------------------
@sqlcmd.exe -b -S localhost -E -d !DBNAME! -Q "!SQLSTRING!" -W
@ECHO.
@ECHO Report is done. Hit any key to close this window....
@pause>nul