みんな大好きな型付きデータセット。
レガシーな環境では、避けて通れないデータセット。
さて、そのデータセットに、頑張って作ったストアドプロシージャをテーブルアダプター経由で登録しようとすると、エラーになった。
原因は、一時テーブルを使ったストアドプロシージャからはデータ列を解析できないからみたい。
一時テーブルを使わないストアドって・・・・思ってたら、データセットをだます方法で強引に使えるみたい。
まず、こういうストアドプロシージャがあったとする。
ALTER Procedure [dbo].[DummyUseTemp] AS SELECT 1 AS A, 2 AS B, 3 AS C, 4 AS D, 5 AS E ,'dummy' AS Comment INTO #list; SELECT * FROM #list; GO
このままだと#listという一時テーブルがあるので使えない。
これを、とりあえず、一時テーブル使わない形で最終結果に合わせてダミー出力するように書き直す。
ALTER Procedure [dbo].[DummyUseTemp] AS SELECT 1 AS A, 2 AS B, 3 AS C, 4 AS D, 5 AS E ,'dummy' AS Comment; --SELECT 1 AS A, 2 AS B, 3 AS C, 4 AS D, 5 AS E ,'dummy' AS Comment INTO #list; --SELECT * FROM #list; GO
これで、もう一度テーブルアダプターから登録させると、一時テーブル使ってないので自動でデータ列が作成されます。
このまま作っちゃった後に、ストアドプロシージャだけコメントを外して、元に戻します。
これで動きます。
ただ、普通に’dummy’とか入れると、MaxLengthプロパティがdummyの5文字になってたりするので、変更するたびに、プロパティを毎回変えなきゃならんので、SELECTする際にCASTとか駆使するとよいかも。
SELECT 0 AS A, 0 AS B, 0 AS C, 0 AS D, 0 AS E, CAST('dummy' AS varchar(10)) AS Comment;
しかし、VS2008で起きた問題だから、VS2013でよきに計らってくれてるかもと思って、VS2013で試してみたけど変わってなかった・・。