是否可以在不访问外部SQL脚本文件的情况下执行以批处理(.bat)文件编写的SQL命令。我怎样才能做到这一点?我不想调用外部sql,因为我想要一个月的输入,然后在某些查询中执行包含该月份的sql命令。
答案 0 :(得分:2)
假设您的文件夹中有3个文件
档案 1 => .sql文件
档案 2 => mybatchfile1.bat(有sqlcmds或cmd来执行上面的.sql文件)
档案 3 =>另一个批处理文件(myexecute.bat)来调用上面的批处理文件(含有内容"启动mybatchfile1.bat")
您需要创建的是 myexecute.bat ,其中包含以下内容:
start mybatchfile1.bat
或
call mybatchfile1.bat
您可以使用开始或通话。
答案 1 :(得分:0)
建议使用powershell脚本:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "SERVER\Instance" -Password "Password"
输出将被组织为一个表格,它比bat文件
更容易答案 2 :(得分:0)
是的,您可以从单个DOS批处理脚本运行查询,从命令行参数和/或用户提示获取输入,非常容易。 SQLCMD允许在命令行上传递查询。根据从命令行向程序传递内容的本质,您可以将DOS变量放在任何您想要的位置。
将以下内容放入扩展名为.cmd
的脚本中(除非您特别需要在16位进程中运行某些内容,否则不应使用.bat
扩展名):< / p>
@ECHO OFF
ECHO.
SET /P Month="Please enter in a month: "
ECHO.
ECHO.
ECHO Month = %Month%
ECHO.
SET Month=%Month:'=%
ECHO Month with single-quotes removed = %Month%
ECHO.
SQLCMD.EXE -E -Q "IF (COALESCE(TRY_CONVERT(TINYINT, REPLACE('%Month%', '''', '''''')), 0) NOT BETWEEN 1 AND 12) BEGIN RAISERROR('Please enter a value 1 - 12.', 16, 1); RETURN; END; SELECT DATENAME(MONTH, '2014-%Month%-01') AS [MonthName];"
在不传递任何参数的情况下运行它。它将提示本月。然后它将在查询中替换该值,该查询在输入上执行自己的数据验证。
注意:请务必验证输入以防止SQL注入。由于这个原因,上面的示例用转义单引号替换单引号。它甚至在查询中使用变量之前删除所有单引号,因此REPLACE()
只是一个冗余安全。
C:\>.\SingleScriptToAcceptParamForQuery.cmd
Please enter in a month: '5
Month = '5
Month with single-quotes removed = 5
MonthName
------------------------------
May
(1 rows affected)