我有一个要概括的存储SQL过程。这涉及将表名、开始时间和结束时间作为变量传递,因此不必每次都编辑过程。我试图使用基本python变量来提示用户。(开始=int(输入(“输入开始时间:”))
我只是没有找到一个简单的方法来做到这一点。我使用了“execute sp\u execute\u external\u scripts”,并一直在研究Pyodbc是否是实现这一点的合适工具,但迄今为止还没有任何效果,而且我还没有完全理解创建包装器的MS文档/教程。那么,提示用户输入可以作为变量注入过程的输入的最简单方法是什么呢?我觉得我错过了一些非常简单的事情。
阅读这里的评论后,我原来的方法是overbroad,需要dynamicsql,我并不自动反对,但为单个表创建过程似乎更安全。因此,我只需要将Start、End和ChunkSize作为整数变量推送到过程中。
解决方法:我使用pyodbc编写了一个小型python程序,获得了预期的结果。谢谢你的帮助,也谢谢你温柔地轻推我最初天真的想法。
import pyodbc
connection = pyodbc.connect('Driver={SQL Server};'
'Server=CROWN;'
'Database=ControlInformation;'
'Trusted_Connection=yes;')
cursor = connection.cursor()
Start = int(input("Enter Start Time: "))
End = int(input("Enter End Time: "))
ChunkSize = int(input("Enter # of files to delete at once: "))
cursor.execute('exec PurgeCurrencyExchangeRates @start = %d, @end = %d,
@ChunkSize = %d' %(Start, End, ChunkSize))
cursor.commit(),
connection.close()
SQL存储过程
CREATE PROCEDURE UserInput
@r int = 1,
@Start bigint = 0,
@End bigint = 0,
@TableName varchar(40) = 'CurrencyExchangeRates',
@ChunkSize int = 10000,
@ColumnName varchar(40) = 'Timestamp'
AS
BEGIN
SET NOCOUNT ON;
while @r > 0
delete top(@ChunkSize)
ControlInformation.dbo.@TableName
where @ColumnName > @Start and @ColumnName < @End
set @r = @@ROWCOUNT