Как получить доступ к хранимой процедуре SQL Server 2008 с помощью параметр с табличным значением в Python

Я ищу способ взять набор результатов и использовать его для поиска записей в таблице, которая находится в SQL Server 2008 - без прокрутки записей по одной. Наборы результатов, которые будут использоваться для поиска записей, могут исчисляться сотнями тысяч. Пока я пытаюсь создать таблицу в памяти с помощью sqlite3, а затем пытаюсь передать эту таблицу в хранимую процедуру, которая принимает параметр со значением таблицы. Работа на стороне SQL Server завершена, пользовательский тип создан, существует процедура тестирования, принимающая параметр с табличным значением, я протестировал ее с помощью TSQL, и она, похоже, работает нормально. В Python простая таблица в памяти была создана через sqlite3. Теперь загвоздка: единственная найденная мной документация для доступа к хранимой процедуре с параметром с табличным значением использует ADO.Net и VB, ничего в Python. К сожалению, я недостаточно программист, чтобы переводить. Кто-нибудь использовал хранимую процедуру SQL Server с параметром со значением таблицы? Есть ли другой подход, который мне следует изучить?

Вот несколько ссылок: Работа на стороне SQL Server завершена, пользовательский тип создан, существует процедура тестирования, принимающая параметр с табличным значением, я протестировал ее с помощью TSQL, и она, похоже, работает нормально. В Python простая таблица в памяти была создана через sqlite3. Теперь загвоздка: единственная найденная мной документация для доступа к хранимой процедуре с параметром с табличным значением использует ADO.Net и VB, ничего в Python. К сожалению, я недостаточно программист, чтобы переводить. Кто-нибудь использовал хранимую процедуру SQL Server с параметром со значением таблицы? Есть ли другой подход, который мне следует изучить?

Вот несколько ссылок: Работа на стороне SQL Server завершена, пользовательский тип создан, существует процедура тестирования, принимающая параметр с табличным значением, я протестировал ее с помощью TSQL, и она, похоже, работает нормально. В Python простая таблица в памяти была создана через sqlite3. Теперь загвоздка: единственная найденная мной документация для доступа к хранимой процедуре с параметром с табличным значением использует ADO.Net и VB, ничего в Python. К сожалению, я недостаточно программист, чтобы переводить. Кто-нибудь использовал хранимую процедуру SQL Server с параметром со значением таблицы? Есть ли другой подход, который мне следует изучить?

Вот несколько ссылок: В Python простая таблица в памяти была создана через sqlite3. Теперь загвоздка: единственная найденная мной документация для доступа к хранимой процедуре с параметром с табличным значением использует ADO.Net и VB, ничего в Python. К сожалению, я недостаточно программист, чтобы переводить. Кто-нибудь использовал хранимую процедуру SQL Server с параметром со значением таблицы? Есть ли другой подход, который мне следует изучить?

Вот несколько ссылок: В Python простая таблица в памяти была создана через sqlite3. Теперь загвоздка: единственная найденная мной документация для доступа к хранимой процедуре с параметром с табличным значением использует ADO.Net и VB, ничего в Python. К сожалению, я недостаточно программист, чтобы переводить. Кто-нибудь использовал хранимую процедуру SQL Server с параметром со значением таблицы? Есть ли другой подход, который мне следует изучить?

Вот несколько ссылок: Достойное объяснение табличных параметров и того, как их настроить в SQL и использовать в .Net

http://www.sqlteam.com/article/sql-server-2008-table-valued-parameters

http: //msdn.microsoft.com/en-us/library/bb675163.aspx#Y2142

Объяснение использования ADO в Python - почти то, что мне нужно, просто нужен тип структурированного параметра. http://www.mayukhbose.com/python/ado/ado-command-3.php

Мой простой код

--TSQL to create type on SQL database
create Type PropIDList as Table
(Prop_Id BigInt primary key)
--TSQL to create stored procedure on SQL database.  Note reference to 
create procedure PropIDListTest @PIDList  PropIDList READONLY
as
SET NOCOUNT ON
select * from
@PIDList p 
SET NOCOUNT OFF
--TSQL to test objects.  
--Declare variable as user defined type (table that has prop_id)
declare @pidlist as propidlist
--Populate variable
insert into @pidlist(prop_id)
values(1000)
insert into @pidlist(prop_id)
values(2000)

--Pass table variable to stored procedure
exec PropIDListTest @pidlist

Теперь самое сложное - Python.

Вот код, создающий таблицу в памяти.

import getopt, sys, string, os, tempfile, shutil
import _winreg,win32api, win32con
from win32com.client import Dispatch
from adoconstants import *
import sqlite3

conn1 = sqlite3.connect(':memory:')
c = conn1.cursor()
# Create table
c.execute('''create table PropList
        (PropID bigint)''')

# Insert a row of data
c.execute("""insert into PropList
                  values (37921019)""")

# Save (commit) the changes
conn1.commit()
c.execute('select * from PropList order by propID')
# lets print out what we have to make sure it works
for row in c:
    print row

Хорошо, моя попытка подключиться через Python

conn = Dispatch('ADODB.Connection')
conn.ConnectionString = "Provider=sqloledb.1; Data Source=nt38; Integrated Security = SSPI;database=pubs"   
conn.Open()
cmd = Dispatch('ADODB.Command')
cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "PropIDListTest @pidlist = ?"
param1 = cmd.CreateParameter('@PIDList', adUserDefined)  # I “think” the parameter type is the key and yes it is most likely wrong here.
cmd.Parameters.Append(param1)
cmd.Parameters.Value = conn1 # Yeah, this is probably wrong as well

(rs, status) = cmd.Execute()
while not rs.EOF:
    OutputName = rs.Fields("Prop_ID").Value.strip().upper()
    print OutputName
    rs.MoveNext()
rs.Close()
rs = None
conn.Close()
conn = None
 # We can also close the cursor if we are done with it
c.close()
conn1.close()

6
задан Gabe 29 April 2012 в 21:10
поделиться