我是python和sql的新手,因此在尝试创建存储过程并将值传递给它时遇到了一些问题。
我在这里浏览了几个问题。据我所知,我使用了ODBC格式,它适用于不需要传递任何内容的过程。查询很简单。它接受2个参数route_no和month。然后查询将计算该路线上该月每个日期的公共汽车所乘三轮车的数量。
if __name__ == "__main__":
conn=pyodbc.connect('''Driver={SQL Server};'''
'''Server=ABY;'''
'''Database=testing;'''
'''Trusted_Connection=yes;''')
cursor=conn.cursor()
proc3="""CREATE PROCEDURE TRIPS_PER_DAY @ROUTENO NVARCHAR(30),@MONTH NVARCHAR(30)
AS
BEGIN
SELECT [ON DATE],SUM(DISTINCT([TRIP NO])) AS SUM_TRIPS
FROM testing.dbo.sheet1$
WHERE [ROUTE NO#]=@ROUTENO AND MONTH([ON DATE])=@MONTH
GROUP BY [ON DATE]
END"""
drop_proc3="""IF EXIST(SELECT * FROM SYS.OBJECTS WHERE TYPE='P' AND NAME='TRIPS_PER_DAY') DROP PROCEDURE TRIPS_PER_DAY"""
call_proc3="""{CALL testing.dbo.TRIPS_PER_DAY(?)(?)}"""
cursor.execute(drop_proc3)
cursor.execute(proc3)
values=('16','11-11-2017')
dff=pd.read_sql(call_proc3,conn,params=(values,))
print(dff)
这是我得到的错误:
DatabaseError:在SQL'{CALL testing.dbo.PASS_PER_STOP(?)(?)}'上的执行失败:('42000','[42000] [Microsoft] [ODBC SQL Server驱动程序]语法错误或访问冲突( 0)(SQLPrepare)')
我不确定我使用的方法是否正确或语法是否错误。 我也不确定如何使用python从过程中传递值和返回结果。有帮助吗?在此先感谢!