På grundval av kommentarerna till min fråga har jag lyckats få igång den lagrade proceduren med tabellvärderade parametrar (och hämta returvärdena från SP) Det slutliga skriptet är som följer:
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)
Autocommit läggs till i anslutningen (för att utföra transaktionen i markören), parametern med tabellvärde (marchcolumntable) förväntar sig 2 kolumner, så arg är modifierad för att passa 2 kolumner.
Parametrarna som krävs förutom tvp ingår i exec-strängen. Den sista parametern i exekveringssträngen är namnet på tvp-parametern (mergeoncolumn) som är fylld med tvp.
valfritt kan du lägga till resultatstatus eller radantal enligt beskrivningen i pytds-dokumentationen:https://python-tds.readthedocs.io/en/latest/index.html
Obs! :i den lagrade proceduren måste du se till att SET NOCOUNT ON läggs till annars får du inga resultat tillbaka till Python