我使用SQL Server 2008 R2中的以下存储过程对此进行了测试:
CREATE PROCEDURE [dbo].[breakfast]
@person varchar(50) = 'nobody',
@food varchar(50) = 'tofu'
AS
BEGIN
SET NOCOUNT ON;
SELECT @person + ' likes to eat ' + @food
END
坏消息(“CALL”)
我找到
sql = """\
{ CALL breakfast (@food=?, @person=?) }
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
结果不一致.
使用{SQL Server Native Client 10.0} ODBC驱动程序,它忽略了参数名称并将参数视为位置,产生…
bacon likes to eat Gord
…并使用较旧的{SQL Server} ODBC驱动程序,我刚收到错误
DataError: (‘22018’, ‘[22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (0) (SQLExecDirectW)’)
好消息(“EXEC”)
我找到
sql = """\
EXEC breakfast @food=?, @person=?
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
使用两个ODBC驱动程序给我以下(正确)结果
Gord likes to eat bacon