Въз основа на коментарите към моя въпрос успях да накарам съхранената процедура да се изпълнява с параметри с таблица (и да получа върнатите стойности от SP) Крайният скрипт е както следва:
import pandas as pd
import pytds
from pytds import login
import sqlalchemy as sa
from sqlalchemy import create_engine
import sqlalchemy_pytds
def connect():
return pytds.connect(dsn='ServerName',database='DBName',autocommit=True, auth=login.SspiAuth())
engine = sa.create_engine('mssql+pytds://[ServerName]', creator=connect)
conn = engine.raw_connection()
with conn.cursor() as cur:
arg = [["foo.ExternalInput","bar.ExternalInput"]]
tvp = pytds.TableValuedParam(type_name="core.MatchColumnTable", rows=arg)
cur.execute("EXEC test_proc @Target = N'[dbname].[tablename1]', @Source = N'[dbname].[table2]', @CleanTarget = 0, @UseColumnsFromTarget = 0, @MergeOnColumn = %s", (tvp,))
result = cur.fetchall()
print(result)
Автоматичното завършване се добавя към връзката (за извършване на транзакцията в курсора), параметърът с стойност на таблицата (marchcolumntable) очаква 2 колони, така че arg се модифицира, за да пасне на 2 колони.
Параметрите, които се изискват освен tvp, са включени в exec низа. Последният параметър в низа за изпълнение е името на параметъра tvp(mergeocolumn), който се попълва с tvp.
по избор можете да добавите състоянието на резултата или броя на редовете, както е описано в документацията на pytds:https://python-tds.readthedocs.io/en/latest/index.html
Забележка! :в съхранената процедура трябва да се уверите, че SET NOCOUNT ON е добавен, в противен случай няма да получите никакви резултати обратно към Python