質問編集履歴
3
SQL追記
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文をなるべく本物に近づけました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,16 +21,65 @@
|
|
21
21
|
何が原因と考えられるか、他に何を試すべきかご教授いただければ幸いです。
|
22
22
|
|
23
23
|
### 該当のソースコード
|
24
|
-
|
24
|
+
項目名など伏せないといけないものがあるため、すべて変更しました。
|
25
|
-
|
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
|
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
|
-
|
59
|
+
(@a is null OR t.a = @a)
|
60
|
+
AND
|
30
|
-
|
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
軽微追記
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
|