首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用从命令行输入的Server参数?

如何使用从命令行输入的Server参数?
EN

Stack Overflow用户
提问于 2014-07-12 01:24:50
回答 2查看 558关注 0票数 0

我是一个SQL新手,我正在努力弄清楚如何在SQL命令行中使用一个参数

对于我的老板/员工,我已经编写了批处理文件来运行SQL代码,以便他们导出数据等等。在访问中,我需要做的就是Paramerter,它提示输入数据。

我希望能够动态地设置@State变量。我希望批处理文件请求State并查询使用该信息。我不知道该怎么做。

批处理文件

代码语言:javascript
复制
sqlcmd -E -S ServerName -i C:\Lead$\SQL\MakeSTPhoeLists.sql
pause

SQL文件

代码语言:javascript
复制
Use LeadsDb
Go

Declare @State VarChar(2)
Set @State = 'DE'
DELETE FROM tblzExportPhone

INSERT INTO tblzExportPhone ( Phone )
SELECT tblLeads.Phone
FROM tblLeads
WHERE tblLeads.ST = @State

Declare @FileName VarChar(100)
Set @FileName = 'H:\Leads\Storage\STLists\' +  @State +'StatePhoneList.csv'

DECLARE @bcp_cmd4 VARCHAR(400) = ' BCP.EXE LeadsDb..tblzExportPhone out ' 
SET @bcp_cmd4 = @bcp_cmd4 + 'H:\Leads\SQL\Formats\PhoneTmp.csv' + ' -T -f H:\Leads\SQL\Formats\tblzExportPhone.fmt' 
SET @bcp_cmd4 = @bcp_cmd4 + ' & Copy /b     H:\Leads\SQL\Formats\ExPhone.csv+H:\Leads\SQL\Formats\PhoneTmp.csv ' + @FileName + ' /y'
Set @bcp_cmd4 = @bcp_cmd4 + ' & Del H:\Leads\SQL\Formats\PhoneTmp.csv'

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-18 21:46:57

本质上,我发现您必须创建一个存储过程并调用一个查询来运行它。我要留下一个例子。BTW查询使用bcp从表中创建CSV文件,然后使用RAR命令对其进行压缩。

顺便说一句,使用存储过程是因为我尝试的每一种方法都失败了,但是一旦我添加了它,我就变成了黄金。可以使用Dos提示的bat文件insead,但我正在为“半计算机智能人”设置bat文件

希望这能帮助像我这样的新手

BAT文件(cmd提示符)

代码语言:javascript
复制
Echo phone numbers in the State to send to Paramount.
Echo Then after the file is made converts it to Zip.
Echo '
Set /p State=Enter Initials of the State? :
sqlcmd -E -S Titania -i H:\Lead$\SQL\STPhones.sql -v StateName=%State%

SQL命令#1

代码语言:javascript
复制
Use dbNameHere
go
Declare @State NVarChar(2)
EXECUTE [dbo].[STPhoneListB] @State=$(StateName)

SQLCommand #2

代码语言:javascript
复制
Use dbNameHere
Go
CREATE PROCEDURE [dbo].[STPhoneListB]
    @State NVarChar(2) = 'DE',
    @Folder VarChar(100) = 'H:\Lead$'
AS
BEGIN
    Declare @FileName VarChar(150)
    Set @FileName = @Folder + '\STPhones_'+ @State +'.csv'

    Declare @DosCMD VarChar(150) = 'Del ' + @Folder +'\STPhones'+ @State
           +'.Zip /q'
    EXEC master..xp_cmdshell @DosCMD 
    DECLARE @bcp_cmd4 VARCHAR(400)
    DELETE FROM tblzExportPhone

    INSERT INTO tblzExportPhone ( Phone )
    SELECT tblLeads.Phone
    FROM tblLeads
    WHERE tblLeads.ST = @State
    Set @bcp_cmd4 = 'BCP.EXE LeadsDb..tblzExportPhone out ' 
    SET @bcp_cmd4 = @bcp_cmd4 + 'H:\SQL\PhoneTmp.csv' +
           ' -T -f H:\SQL\tblzExportPhone.fmt' 
    SET @bcp_cmd4 = @bcp_cmd4 
           + ' & Copy /b H:\SQL\ExPhone.csv+H:\SQL\PhoneTmp.csv '
           + @FileName + ' /y'
    Set @bcp_cmd4 = @bcp_cmd4 + ' & Del H:\SQL\PhoneTmp.csv'
    EXEC master..xp_cmdshell @bcp_cmd4 
    Set @bcp_cmd4 = 'cd '+ @Folder + 
           ' & "C:\Program Files\WinRAR\rar.exe" m STPhones_'+ @State +'.Zip ' + 
           'STPhones_'+ @State +'.csv'

    EXEC master..xp_cmdshell @bcp_cmd4 
    DELETE FROM tblzExportPhone
END
票数 0
EN

Stack Overflow用户

发布于 2014-07-12 01:39:35

在sql文件中使用此表示法$(statename)

将其添加到命令文件-v statename = %1

并执行它,传递参数mycommanfile.cmd DE

还可以阅读以获得完整的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24708718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档