はじめに
ある日、コメントを書き終えてスクリプトの生成をしようと思ったらエラーで取得できなくなってしまったのでメモ。
結論
結論を先に言えばコメント内にSQL文の中に更にスラッシュスターコメントを記述するとTextHeaderで落ちる。
こんなエラーが出ます。
再現したバージョン
Sample.sql
SELECT @@VERSION
Log
Microsoft SQL Server 2014 - 12.0.2269.0 (X64)
Jun 10 2015 03:35:45
Copyright (c) Microsoft Corporation
Express Edition (64-bit) on Windows NT 6.3 <X64> (Build 14393: )
テストデータを作る
CREATE VIEW用のテーブルを作る。
VIEWでなくてもスクリプトを生成するタイミングでコメントが書ければ何でもよい。
CreateHoge.sql
CREATE TABLE T_ほげ(
ID int NULL,
Name nvarchar(50) NULL
) ON PRIMARY
問題のCreateView
Sample.sql
/*--------------------------------------------------------------------
名称 :hogehoge
説明 :fugafuga
SELECT ID /**/, Name FROM T_ほげ
/* SELECT ID , Name FROM T_ほげ */
--------------------------------------------------------------------*/
CREATE VIEW V_ほげげほ AS
SELECT
ID
, Name
FROM T_ほげ
上記CreateViewでSQL文とスラッシュスターコメントをコメントに混ぜるとスクリプト生成ができなくなってしまった。
ただしViewとしては普通に動作する。
どんなコメントがダメなのか。
アウトなコメント
SQL文とスラッシュスターコメントをコメントに混ぜるとスクリプトの生成ができなくなる。
text
SELECT ID /**/, Name FROM T_ほげ
/* SELECT ID , Name FROM T_ほげ */
セーフなコメント
他にもスクリプト生成で落ちるのではないかと思ったものをまとめてみた。
SQL文とスラッシュスターコメントをコメントに混ぜると危険になるらしい。
- コメントの中にSQL文を記述する
- コメントの中に多重コメント
- --コメント
Sample
■ コメントの中にSQL文は問題ない
SELECT ID , Name FROM T_ほげ
SELECT ID -- , Name FROM T_ほげ(SQL文中にある --コメント付きのものも大丈夫)
/*/*/*/*/*/*/*/*/*/*多重コメントは大丈夫!*/*/*/*/*/*/*/*/*/*/
追伸 2018年10月11日
SQLServer2017になってエラーにならず生成できるようになってた
Sample.sql
SELECT @@VERSION
Log
Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64)
Jul 21 2018 07:47:45
Copyright (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Home 10.0 <X64> (Build 17763: )