質問編集履歴

3

SQL追記

2023/07/12 07:22

投稿

htk_htk
htk_htk

スコア11

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,8 @@
22
22
 
23
23
  ### 該当のソースコード
24
24
  項目名など伏せないといけないものがあるため、すべて変更しました。
25
- 全文は文字数制限で載せられなかったので、回答欄に載せます。
25
+ ~~全文は文字数制限で載せられなかったので、回答欄に載せます。~~
26
+ 載せられませんでした・・・
26
27
  ```SQL
27
28
  SELECT
28
29
  t.a group1
@@ -54,6 +55,76 @@
54
55
  FROM
55
56
  (SELECT DATEPART(yyyy, CONVERT(DATETIME, ym + '/01')) yyyy, DATEPART(m, CONVERT(DATETIME, ym + '/01')) m, b, bnm, a FROM W_YM ym, M_B b WHERE ym.flg5 = b.flg5) ymb
56
57
  LEFT JOIN
58
+ (SELECT
59
+ shorino
60
+ ,no
61
+ ,Gcd
62
+ ,ymd hiduke
63
+ ,CASE WHEN (CASE WHEN IsNull(shime, 0) = 0 THEN 1 ELSE shime END) <= 28 THEN (CASE WHEN DATEPART(d, ymd) > shime THEN DATEFROMPARTS(DATEPART(yyyy, DATEADD(m, 1, ymd)), DATEPART(m, DATEADD(m, 1, ymd)), (CASE WHEN IsNull(shime, 0) = 0 THEN 1 ELSE shime END)) ELSE DATEFROMPARTS(DATEPART(yyyy, ymd), DATEPART(m, ymd), (CASE WHEN IsNull(shime, 0) = 0 THEN 1 ELSE shime END)) END) ELSE DATEADD(d, -1, DATEFROMPARTS(DATEPART(yyyy, DATEADD(m, 1, ymd)), DATEPART(m, DATEADD(m, 1, ymd)), 1)) END ymd
64
+ ,Scd
65
+ ,Sjikan
66
+ ,kjikan
67
+ ,sjikan1
68
+ ,sjikan2
69
+ ,sjikanM
70
+ ,sjikanH
71
+ ,a
72
+ ,shime
73
+ FROM
74
+ T_N_H
75
+ ) h
76
+ ON
77
+ d.nippono = h.no
78
+ LEFT JOIN
79
+ M_S s
80
+ ON
81
+ d.sagyoincd = s.sagyoincd
82
+ LEFT JOIN
83
+ (SELECT
84
+ b
85
+ ,bnm
86
+ ,a
87
+ ,CASE WHEN @f= 1 THEN b ELSE IsNull(f_b, b) END f
88
+ ,pre_m
89
+ ,act_m
90
+ ,AA
91
+ ,kAA
92
+ ,NN2AA
93
+ ,kuAA
94
+ ,nyuAA
95
+ ,f_b
96
+ ,flg1
97
+ ,flg2
98
+ ,flg3
99
+ ,flg4
100
+ ,flg5
101
+ FROM
102
+ M_B
103
+ ) c
104
+ ON
105
+ h.Gcd = c.b
106
+ LEFT JOIN
107
+ W_P_S p
108
+ ON
109
+ h.shime = p.shime
110
+ WHERE
111
+ h.ymd >= p.startymd
112
+ AND
113
+ h.ymd <= p.endymd
114
+ AND
115
+ (@tsujo = 1 OR (@tsujo = 2 AND c.flg1 = 1) OR (@tsujo = 3 AND c.flg1 = 0))
116
+ GROUP BY c.f, DATEPART(yyyy, h.ymd), DATEPART(m, h.ymd)
117
+ ) c1
118
+ ON
119
+ ymb.b = c1.f
120
+ AND
121
+ ymb.yyyy = c1.yyyy
122
+ AND
123
+ ymb.m = c1.m
124
+ LEFT JOIN
125
+ M_ABC t
126
+ ON
127
+ t.a = ymb.a
57
128
  ・・・省略・・・
58
129
  WHERE
59
130
  (@a is null OR t.a = @a)

2

SQL文をなるべく本物に近づけました。

2023/07/12 07:08

投稿

htk_htk
htk_htk

スコア11

test CHANGED
File without changes
test CHANGED
@@ -21,16 +21,65 @@
21
21
  何が原因と考えられるか、他に何を試すべきかご教授いただければ幸いです。
22
22
 
23
23
  ### 該当のソースコード
24
- 一つ条件下以外は普通に動作すことから
24
+ 項目名など伏せないといけないもがあためすべて変更しました。
25
- 色々省いており参考程度にはなりますが以下のようなSQLを書いております。
25
+ 全文文字数制限で載せられかったので回答欄に載せます。
26
26
  ```SQL
27
- SELECT *
27
+ SELECT
28
+ t.a group1
29
+ ,t.anm group1nm
30
+ ,ymb.b group2
31
+ ,ymb.bnm group2nm
32
+ ,CONVERT(int, CONCAT(ymb.yyyy, ymb.m)) group3
33
+ ,CONCAT(ymb.yyyy, '年', ymb.m, '月') komokunm
34
+ ,IsNull(c1.AA1, 0) AA1
35
+ ,IsNull(c1.AA2, 0) AA2
36
+ ,IsNull(c1.AA3, 0) AA3
37
+ ,IsNull(c1.AA4, 0) AA4
38
+ ,IsNull(c1.AA5, 0) AA5
39
+ ,IsNull(c1.AA6, 0) AA6
40
+ ,IsNull(c1.AA7, 0) AA7
41
+ ,IsNull(c1.BB1, 0) BB1
42
+ ,IsNull(c1.BB2, 0) BB2
43
+ ,IsNull(c1.BB3, 0) BB3
44
+ ,IsNull(c1.BB4, 0) BB4
45
+ ,IsNull(c1.BB5, 0) BB5
46
+ ,IsNull(c1.BB6, 0) BB6
47
+ ,IsNull(c1.BB7, 0) BB7
48
+ ,IsNull(c2.totalAA, 0) zAA
49
+ ,IsNull(c3.totalAA, 0) kAA
50
+ ,IsNull(s.AA, 0) AA
51
+ ,IsNull(m.MM, 0) MM
52
+ ,IsNull(n.NN1, 0) NN1
53
+ ,IsNull(n.NN2, 0) NN2
28
- FROM M_ABC
54
+ FROM
55
+ (SELECT DATEPART(yyyy, CONVERT(DATETIME, ym + '/01')) yyyy, DATEPART(m, CONVERT(DATETIME, ym + '/01')) m, b, bnm, a FROM W_YM ym, M_B b WHERE ym.flg5 = b.flg5) ymb
56
+ LEFT JOIN
57
+ ・・・省略・・・
58
+ WHERE
29
- WHERE (@a is null OR a = @a)
59
+ (@a is null OR t.a = @a)
60
+ AND
30
- AND(@b is null OR b = @b)
61
+ (@b is null OR ymb.b = @b)
62
+ AND
63
+ (IsNull(c1.AA2,0) <> 0 OR IsNull(c1.BB2,0) <> 0
64
+ OR
65
+ IsNull(c1.AA3,0) <> 0 OR IsNull(c1.BB3,0) <> 0
66
+ OR
67
+ IsNull(c1.AA4,0) <> 0 OR IsNull(c1.BB4,0) <> 0
68
+ OR
69
+ IsNull(c1.AA5,0) <> 0 OR IsNull(c1.BB5,0) <> 0
70
+ OR
71
+ IsNull(c1.AA6,0) <> 0 OR IsNull(c1.BB6,0) <> 0
72
+ OR
73
+ IsNull(c1.AA7,0) <> 0 OR IsNull(c1.BB7,0) <> 0
74
+ OR
75
+ IsNull(c2.totalAA, 0) <> 0 OR IsNull(c3.totalAA, 0) <> 0
76
+ OR
77
+ IsNull(s.AA, 0) <> 0 OR IsNull(m.MM, 0) <> 0
78
+ OR
79
+ IsNull(n.NN1,0) <> 0 OR IsNull(n.NN2,0) <> 0)
31
80
  ```
32
- この[a]が[3]、[b]が[null]のときに発生します。
81
+ この[@a]が[3]、[@b]が[null]のときに発生します。
33
- ([a]が[null]や[a]が[3]で[b]が[100]のときは発生しません。長くても10秒ほどで帳票表示まで完了します。)
82
+ ([@a]が[null]や[@a]が[3]で[@b]が[100]のときは発生しません。長くても10秒ほどで帳票表示まで完了します。)
34
83
 
35
84
  パラメーターは以下のように渡しています。
36
85
  ※実際はコンボボックスのValueを最終的にint型かDBNullで渡すメソッドを通してセットしていますが、以下の渡し方でも同じ現象が起こりました。
@@ -38,6 +87,9 @@
38
87
  using (SqlCommand cmd = new SqlCommand(strSQL, mCon))
39
88
  {
40
89
  cmd.Parameters.AddWithValue("a", 3);
90
+ cmd.Parameters.AddWithValue("b", null);
91
+ cmd.Parameters.AddWithValue("f", 1);
92
+ cmd.Parameters.AddWithValue("tsujo", 1);
41
93
  using (SqlDataAdapter da = new SqlDataAdapter(cmd)) da.Fill(dt); ←エラー発生個所はここ
42
94
  }
43
95
  ```
@@ -48,9 +100,14 @@
48
100
 
49
101
  こちら(https://baiteen.wordpress.com/2010/11/12/%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E3%81%A8sqlserver%E3%81%AE%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%81%8C%E9%81%85%E3%81%84/)
50
102
  を参考に、パラメーターの型をInt型に指定しましたが結果は変わりませんでした。
103
+ これに関連してSQL側で直接キャストを試みましたが変わりませんでした。
104
+ ーーーーーーーー
105
+ (@a is null OR t.a = @a)
106
+
107
+ (@a is null OR t.a = cast(@a as int))
108
+ ーーーーーーーー
51
109
 
52
110
  SSMSで同じSQLを動作させましたが、
53
111
  パラメーターでの動かし方が良くわからず、
54
112
  単なる置き換えですとすぐに結果は返ってきます。(2秒ほど)
55
113
  該当のパラメータをスカラー変数で指定してみても、特に問題なくすぐ処理は終わりました。
56
-

1

軽微追記

2023/07/11 12:39

投稿

htk_htk
htk_htk

スコア11

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  ### 該当のソースコード
24
24
  一つの条件下以外は普通に動作することから、
25
- 色々省いておりますが、以下のようなSQLを書いております。
25
+ 色々省いており参考程度にはなりますが、以下のようなSQLを書いております。
26
26
  ```SQL
27
27
  SELECT *
28
28
  FROM M_ABC