30
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi có một thủ tục được lưu trữ, mã:
DECLARE @RC int
DECLARE @id varchar[13]
DECLARE @pw varchar[13]
DECLARE @depart varchar[32]
DECLARE @class varchar[12]
DECLARE @name varchar[12]
DECLARE @birthday varchar[10]
DECLARE @grade int
DECLARE @subgrade int
SELECT @id = 'test'
SELECT @pw = '12345'
SELECT @depart = 'none'
SELECT @class = 'GM'
SELECT @name = 'name'
SELECT @birthday = 'None'
SELECT @grade = 3
SELECT @subgrade = 2
EXEC @RC = [my_database].[dbo].[my_table] @id, @pw, @depart, @class, @name, @birthday, @grade, @subgrade
DECLARE @PrnLine nvarchar[4000]
PRINT 'Stored Procedure: my_database.dbo.my_table'
SELECT @PrnLine = ' Return Code = ' + CONVERT[nvarchar, @RC]
Làm thế nào tôi có thể tạo một truy vấn SQL thô để tạo tài khoản bằng quy trình này? Tôi đang sử dụng Flask và Pyodbc.
Gord Thompson
Huy hiệu vàng 111K3030 gold badges197 silver badges395 bronze badges
Đã hỏi ngày 20 tháng 2 năm 2015 lúc 18:22Feb 20, 2015 at 18:22
Từ tài liệu PYODBC
Để gọi một quy trình được lưu trữ ngay bây giờ, hãy chuyển cuộc gọi đến phương thức thực thi bằng cách sử dụng định dạng cơ sở dữ liệu của bạn nhận ra hoặc sử dụng định dạng Escape gọi ODBC. [Trình điều khiển ODBC sau đó sẽ định dạng lại cuộc gọi cho bạn để khớp với cơ sở dữ liệu đã cho.]
Đối với SQL Server, bạn sẽ sử dụng một cái gì đó như thế này:
# SQL Server format
cursor.execute["exec sp_dosomething[123, 'abc']"]
# ODBC format
cursor.execute["{call sp_dosomething[123, 'abc']}"]
Vì vậy, để gọi thủ tục của bạn
id_ = 'test'
pw = '12345'
depart = 'none'
class_ = 'GM'
name = 'name'
birthday = 'None'
grade = 3
subgrade = 2
sql = 'exec [my_database].[dbo].[my_table][?, ?, ?, ?, ?, ?, ?, ?]'
values = [id_, pw, depart, class_, name, birthday, grade, subgrade]
cursor.execute[sql, [values]]
Đã trả lời ngày 20 tháng 2 năm 2015 lúc 19:00Feb 20, 2015 at 19:00
Dirndirndirn
18.3k3 Huy hiệu vàng69 Huy hiệu bạc71 Huy hiệu đồng3 gold badges69 silver badges71 bronze badges
5
Câu trả lời được chấp nhận không giải quyết vấn đề nắm bắt giá trị trả về từ quy trình được lưu trữ, có thể được thực hiện như thế này:
id_ = 'test'
pw = '12345'
depart = 'none'
class_ = 'GM'
name = 'name'
birthday = 'None'
grade = 3
subgrade = 2
sql = """\
SET NOCOUNT ON;
DECLARE @RC int;
EXEC @RC = [my_database].[dbo].[my_sp] ?, ?, ?, ?, ?, ?, ?, ?;
SELECT @RC AS rc;
"""
values = [id_, pw, depart, class_, name, birthday, grade, subgrade]
cursor.execute[sql, values]
rc = cursor.fetchval[] # pyodbc convenience method similar to cursor.fetchone[][0]
Đã trả lời ngày 2 tháng 2 năm 2017 lúc 18:00Feb 2, 2017 at 18:00
Gord Thompsongord ThompsonGord Thompson
Huy hiệu vàng 111K3030 gold badges197 silver badges395 bronze badges
Đã hỏi ngày 20 tháng 2 năm 2015 lúc 18:22
Từ tài liệu PYODBCMar 23, 2018 at 19:39
Eman4realEman4realEman4real
Để gọi một quy trình được lưu trữ ngay bây giờ, hãy chuyển cuộc gọi đến phương thức thực thi bằng cách sử dụng định dạng cơ sở dữ liệu của bạn nhận ra hoặc sử dụng định dạng Escape gọi ODBC. [Trình điều khiển ODBC sau đó sẽ định dạng lại cuộc gọi cho bạn để khớp với cơ sở dữ liệu đã cho.]5 silver badges12 bronze badges
1
Đối với SQL Server, bạn sẽ sử dụng một cái gì đó như thế này:
id_ = 'test'
pw = '12345'
depart = 'none'
class_ = 'GM'
name = 'name'
birthday = 'None'
grade = 3
subgrade = 2
sql = """\
DECLARE @RC int;
EXEC [my_database].[dbo].[my_sp] @RC OUTPUT, @id_=?, @pw=?, @depart=?, @class_=?, @name=?, @birthday=?, @grade=?, @subgrade=?;
SELECT @RC AS rc;
"""
values = [id_, pw, depart, class_, name, birthday, grade, subgrade]
cursor.execute[sql, values]
rc = cursor.fetchval[]
Vì vậy, để gọi thủ tục của bạnJun 5, 2018 at 9:16
Đã trả lời ngày 20 tháng 2 năm 2015 lúc 19:00Viggos
Dirndirn3 silver badges6 bronze badges
18.3k3 Huy hiệu vàng69 Huy hiệu bạc71 Huy hiệu đồng
sql = " exec your_SP @codemp = ?, @fecha = ? "
prm = [dict['param1'], dict['param2']]
cursor.execute[qry, params]
Câu trả lời được chấp nhận không giải quyết vấn đề nắm bắt giá trị trả về từ quy trình được lưu trữ, có thể được thực hiện như thế này:Jul 30, 2019 at 22:19
Đã trả lời ngày 2 tháng 2 năm 2017 lúc 18:00
Gord Thompsongord ThompsonĐừng quên đặt số Nocount trong thủ tục được lưu trữ của bạn.Nov 3, 2020 at 19:25
3
Đã trả lời ngày 23 tháng 3 năm 2018 lúc 19:39
SQL = 'exec sp_UpdateUserGoogleAuthenticated ''?'', ''?'''
4885 Huy hiệu bạc12 Huy hiệu Đồng
Một hương vị khác của câu trả lời của Gord là sử dụng các tham số đầu ra và được đặt tên [được xác định trong quy trình được lưu trữ] cho rõ ràng.
Đã trả lời ngày 5 tháng 6 năm 2018 lúc 9:164 gold badges27 silver badges52 bronze badges
ViggosviggosFeb 1, 2017 at 23:06