Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Python извикване на запаметена процедура на sql-сървър с параметър с таблица

Въз основа на коментарите към моя въпрос успях да накарам съхранената процедура да се изпълнява с параметри с таблица (и да получа върнатите стойности от 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Конфигуриране на доставка на регистрационни файлове на SQL Server

  2. Кумулативна сума на SQL Server по групи

  3. Актуализиране на пощенски акаунт в база данни (SSMS)

  4. Как да създадете ограничение за проверка на множество колони в SQL Server - SQL Server / TSQL урок, част 84

  5. Кога да използвате Common Table Expression (CTE)