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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

3138閲覧

pyodbcからSQLServerストアドプロシージャーの結果が取得できない

taharasan

総合スコア55

SQL Server

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

Python 3.x

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

0グッド

0クリップ

投稿2018/10/12 03:27

編集2018/10/26 07:32

前提・実現したいこと

SQLServerのテーブルから、下記のような希望的結果を取得する際、
「TagName」の数が毎月不定の為、ストアドプロシージャにてSQL文を組み立て、
(単純にTagNameをループさせ、SQL文を作成)
pyodbcにてストアドプロシージャーを実行した際、以下のようなエラーで結果が取得できませんでした。

テーブル名Proportion_ratio_TBL
ストアドプロシージャ名Stored_Proportion_View

##エラー内容

python3

1SQL="Stored_Proportion_View @BillingYYYYMM='2018/07/01',@AccountId='123456789' 2Result=func_pyodbcStored(SQLSERVER_ADD, SQLUSER, SQLPASS, SQLDBNAME, SQL) 3 4print("★ResultのLen:" + str(len(Result))) #2 5pprint(Result) #'NG' 6 7#ストアドへのアクセス処理(func_pyodbcStored)の明細は省略していますが、他のストアド命令文では正常に取得しています。

試したこと

ストアドプロシージャーで生成されたSQL文を「SQL Server Management Studio」上にて実行した場合や、
SQL文をpython上にてベタ打ちにて実行、又は、python内にて同様のSQL文を作成し実行した際には正常に取得ができます。

###質問内容
pyodbcからSQLServerのストアドプロシージャーを実行する際、何か制限があるでしょうか?

##■「Proportion_ratio_TBL」テーブル内容

IdAccoutIdBillingDateProductNameTagNameProportion_ratio
11234567892018/07/01Amazon ElastiCache営業A20
21234567892018/07/01Amazon ElastiCache営業B30
31234567892018/07/01Amazon ElastiCache営業C50
41234567892018/07/01Amazon Relational Database Service営業A100
51234567892018/07/01Amazon Relational Database Service営業B0
61234567892018/07/01Amazon Relational Database Service営業C0
71234567892018/08/01Amazon ElastiCache営業A50
81234567892018/08/01Amazon ElastiCache営業B50
91234567892018/07/01Amazon Relational Database Service営業C100

##生成したSQL文(7月分取得)

SQL

1SELECT ProductName 2,max(CASE WHEN TagName = '営業A' THEN Proportion_ratio END) AS 営業A 3,max(CASE WHEN TagName = '営業B' THEN Proportion_ratio END) AS 営業B 4,max(CASE WHEN TagName = '営業C' THEN Proportion_ratio END) AS 営業C 5FROM Proportion_ratio_TBL 6WHERE AccoutId='123456789' 7AND BillingDate='2018/07/01' 8GROUP BY ProductName 9ORDER BY ProductName

##■希望的結果

ProductName営業A営業B営業C
Amazon ElastiCache203050
Amazon Relational Database Service10000

ツール

Python 3.6.5
pyodbc 4.0.22
SQL Server 2017 Express
SQL Server Management Studio v17.3

### 10/26追記
切り分けがよく割らないのですが
簡単なプロシージャ(SELECT * FROM で表示するだけとか)は呼び出せますが、
内部から別のプロシージャーをコールするようなプロシージャー呼べませんでした。

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

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

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

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

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

guest

回答1

0

自己解決

別のプロシージャコールでは解決できなかったので、1つのプロシージャ内にて解決するようにしました。

投稿2018/12/22 07:16

taharasan

総合スコア55

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問