- Home
- SQL Server, SSRS
- [SQL Server][SSRS]’)’ 付近に不適切な構文があります。
[SQL Server][SSRS]’)’ 付近に不適切な構文があります。
単純に「)」前後がおかしい場合もあるが、そうでない場合
状況
「’)’ 付近に不適切な構文があります。」
「引用符が閉じられていません」
「警告: NULL 値は集計またはその他の SET 演算で削除されました。」
などのエラーが出る場合。
ソースを見ても、「正しいだろ」と思った場合。
原因
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
IF OBJECT_ID(N'tempdb.dbo.#TEST_TABLE', N'U') IS NOT NULL DROP TABLE [#TEST_TABLE] ; CREATE TABLE [#TEST_TABLE] ( SHOHIN_CD varchar(4), SHOHIN_NM varchar(40) ) DECLARE @SQL nvarchar(4000) DECLARE @ShohinCd varchar(4) = '1001' INSERT INTO #TEST_TABLE VALUES ('1000','みかん') INSERT INTO #TEST_TABLE VALUES ('1001','バナナ') INSERT INTO #TEST_TABLE VALUES ('1002','山芋鉄板') SET @SQL = N' SELECT * FROM [#TEST_TABLE] WHERE SHOHIN_CD IN (' + @ShohinCd + N')'; EXEC sp_executesql @SQL |
SSRSのチェックボックス付きのドロップダウンリストからパラメータを受け取る場合、クエリはIN句でデータを受け取る(23行目)。
しかし、ここでパラメータ「@ShohinCd」に空白を指定すると、「SHOHIN_CD IN ()」となり構文エラーとなる。
対応策
チェックボックス付きのドロップダウンにNULLや空白を表示したい場合はドロップダウンのラベルは空白で、コード値は「*」などを設定した方がよい。
検索クエリ側では
「(CASE WHEN ISNULL(SHOHIN_CD,”) = ” THEN ‘*’ ELSE SHOHIN_CD END) IN ・・・」
として、NULLや空白を「*」に置き換える。
ドロップダウン側では、NULLや空白は「*」をパラメータに入れ、検索側でもNULLや空白は「*」に置き換える
ドロップダウンのクエリ例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
DECLARE @Table table ( SHOHIN_CD varchar(4), SHOHIN_NM varchar(40) ) INSERT INTO @Table VALUES ('1000','みかん') INSERT INTO @Table VALUES ('1001','バナナ') INSERT INTO @Table VALUES ('1002','山芋鉄板') -- ここからクエリ SELECT '*' AS SHOHIN_CD, '' AS SHOHIN_NM UNION ALL SELECT (CASE WHEN ISNULL(SHOHIN_CD,'') = '' THEN '*' ELSE SHOHIN_CD END) AS SHOHIN_CD, SHOHIN_NM FROM @Table |
検索クエリ例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
IF OBJECT_ID(N'tempdb.dbo.#TEST_TABLE', N'U') IS NOT NULL DROP TABLE [#TEST_TABLE] ; CREATE TABLE [#TEST_TABLE] ( SHOHIN_CD varchar(4), SHOHIN_NM varchar(40) ) DECLARE @SQL nvarchar(4000) DECLARE @ShohinCd varchar(4) = NCHAR(39) + '*' + NCHAR(39) INSERT INTO #TEST_TABLE VALUES ('1000','みかん') INSERT INTO #TEST_TABLE VALUES ('1001','バナナ') INSERT INTO #TEST_TABLE VALUES ('','山芋鉄板') SET @SQL = N' SELECT * FROM [#TEST_TABLE] WHERE (CASE WHEN ISNULL(SHOHIN_CD,' + NCHAR(39) + NCHAR(39) + N') = ' + NCHAR(39) + NCHAR(39) + N' THEN ' + NCHAR(39) +N'*' + NCHAR(39) + N' ELSE SHOHIN_CD END) IN (' + @ShohinCd + N')'; EXEC sp_executesql @SQL |
※NCHAR(39)はシングルクォーテーションを表す。
SSRSでのエラー
チェックボックス付きのドロップダウンリストで空白値を選択すると、何も対策がされていない場合。
SSRSの「レポート実行」時に「引用符が閉じられていない」というエラーが発生する。
使用的に空白やNULLはチェックボックス付きドロップダウンリストには表示されないようにするといった仕様を検討するなどの対策が必要。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。