前提・実現したいこと
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」テーブル内容
Id | AccoutId | BillingDate | ProductName | TagName | Proportion_ratio |
---|---|---|---|---|---|
1 | 123456789 | 2018/07/01 | Amazon ElastiCache | 営業A | 20 |
2 | 123456789 | 2018/07/01 | Amazon ElastiCache | 営業B | 30 |
3 | 123456789 | 2018/07/01 | Amazon ElastiCache | 営業C | 50 |
4 | 123456789 | 2018/07/01 | Amazon Relational Database Service | 営業A | 100 |
5 | 123456789 | 2018/07/01 | Amazon Relational Database Service | 営業B | 0 |
6 | 123456789 | 2018/07/01 | Amazon Relational Database Service | 営業C | 0 |
7 | 123456789 | 2018/08/01 | Amazon ElastiCache | 営業A | 50 |
8 | 123456789 | 2018/08/01 | Amazon ElastiCache | 営業B | 50 |
9 | 123456789 | 2018/07/01 | Amazon Relational Database Service | 営業C | 100 |
##生成した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 ElastiCache | 20 | 30 | 50 |
Amazon Relational Database Service | 100 | 0 | 0 |
ツール
Python 3.6.5
pyodbc 4.0.22
SQL Server 2017 Express
SQL Server Management Studio v17.3
### 10/26追記
切り分けがよく割らないのですが
簡単なプロシージャ(SELECT * FROM で表示するだけとか)は呼び出せますが、
内部から別のプロシージャーをコールするようなプロシージャー呼べませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。