我是一个SQL新手,我正在努力弄清楚如何在SQL命令行中使用一个参数
对于我的老板/员工,我已经编写了批处理文件来运行SQL代码,以便他们导出数据等等。在访问中,我需要做的就是Paramerter,它提示输入数据。
我希望能够动态地设置@State变量。我希望批处理文件请求State并查询使用该信息。我不知道该怎么做。
批处理文件
sqlcmd -E -S ServerName -i C:\Lead$\SQL\MakeSTPhoeLists.sql
pauseSQL文件
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'谢谢。
发布于 2014-07-18 21:46:57
本质上,我发现您必须创建一个存储过程并调用一个查询来运行它。我要留下一个例子。BTW查询使用bcp从表中创建CSV文件,然后使用RAR命令对其进行压缩。
顺便说一句,使用存储过程是因为我尝试的每一种方法都失败了,但是一旦我添加了它,我就变成了黄金。可以使用Dos提示的bat文件insead,但我正在为“半计算机智能人”设置bat文件
希望这能帮助像我这样的新手
BAT文件(cmd提示符)
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
Use dbNameHere
go
Declare @State NVarChar(2)
EXECUTE [dbo].[STPhoneListB] @State=$(StateName)SQLCommand #2
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发布于 2014-07-12 01:39:35
在sql文件中使用此表示法$(statename)
将其添加到命令文件-v statename = %1中
并执行它,传递参数mycommanfile.cmd DE
还可以阅读这以获得完整的示例。
https://stackoverflow.com/questions/24708718
复制相似问题