質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2320閲覧

pyodbcでストアドプロシージャのエラーを受け取りたい

yukiff

総合スコア10

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/03/31 02:08

編集2022/03/31 07:04

pyodbcを使用してsqlserverのspを実行したいと思っています。
spは単純なinsert処理です。
pythonの実行処理で記載している1つ目がspの呼出し、2つ目がinsert文になります。
2つ目は実行時にエラーが発生した場合、pythonでエラーが確認出来ますが、
1つ目は正常終了してしまい、pythonでエラーが確認できません。
1つ目も同様に確認するためにはどのようにすればよいのでしょうか。

python3.9
pyodbc 4.0.32

python関数

1def exec(self,sql,params=None): 2 conn = self.__connect() 3 cur = conn.cursor() 4 try: 5 if params == None: 6 cur.execute(sql) 7 else: 8 cur.execute(sql,params) 9 conn.commit() 10 except pyodbc.Error as e: 11 conn.rollback() 12 print(e) 13 cur.close() 14 conn.close()

python実行

1data = db.exec('EXEC sp_insert_t_id ?,?,?',params=[5,'namae','bikou']) 2print(data) 3 4data = db.exec("INSERT INTO t_id VALUES (5,'namae','bikou',getdate(),getdate())") 5print(data)

sql

1USE [python_sql_test] 2GO 3SET ANSI_NULLS OFF 4GO 5SET QUOTED_IDENTIFIER OFF 6GO 7 8IF EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name ='sp_insert_t_id') 9DROP PROCEDURE sp_insert_t_id 10GO 11 12CREATE PROCEDURE [dbo].[sp_insert_t_id] 13 @id INT, 14 @name NVARCHAR(50), 15 @remarks NVARCHAR(50) 16AS 17BEGIN 18 SET NOCOUNT OFF 19 BEGIN TRY 20 BEGIN TRANSACTION 21 INSERT INTO t_id 22 VALUES 23 (@id 24 ,@name 25 ,@remarks 26 ,getdate() 27 ,getdate() 28 ) 29 COMMIT TRANSACTION 30 END TRY 31 BEGIN CATCH 32 ROLLBACK TRANSACTION 33 DECLARE @Message varchar(MAX) = ERROR_MESSAGE(), 34 @Severity int = ERROR_SEVERITY(), 35 @State smallint = ERROR_STATE(); 36 37 RAISERROR (@Message, @Severity, @State) 38 END CATCH 39END 40GO

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2022/03/31 02:55

質問は修正できます。 [SQL Server]タグを追加し、バージョンも明示してください。
guest

回答1

0

自己解決

ストアドプロシージャの「SET NOCOUNT ON」に変更することで解決しました。

sql

1... 2BEGIN 3 SET NOCOUNT ON 4 BEGIN TRY 5...

投稿2022/04/01 01:52

yukiff

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問