• 締切済み

ユーザ定義関数を使用して、列名を返すことは可能?

22歳男性です。SQLServerについて質問があります。 =============================================== select * from テーブル名 where F_xxx(@a) like '%あ' ----------------------------------- create function F_xxx (@a int) returns ■■■ as begin return ( case @a when 1 then '社員ID' when 2 then '社員名' end ) end =============================================== 上記のように、ユーザ定義関数(F_xxx)を作り、特定の数値が来た場合に列名を返すプログラムを作りたいのですが、戻り値のデータ型(■■■)がわかりません。 データ型に「Column型」みたいのはあるのでしょうか? 知っている方がいましたら、教えてくださいマシ。

みんなの回答

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

文字通り、動的にクエリを構築することです。 今回の目的とは一致しないでしょうが、SQL Serverでは以下のようなストアドプロシージャを書くことはできますので、これを見て動的クエリが何か察して頂ければと思います。 --テーブル名、カラム番号、キーワードを指定して、 --そのカラムの末尾にキーワードがあるかどうか検索するストアド CREATE PROCEDURE sp_srch (@TABLENAME sysname, @COLNO int,@SRCHWORD varchar(100)) AS BEGIN SET NOCOUNT ON --指定されたテーブルの列が検索可能な型かどうか調べる DECLARE @COLNAME sysname SELECT @COLNAME=name from sys.columns WHERE object_id=object_id(@TABLENAME) AND column_id=@COLNO AND user_type_id in (SELECT user_type_id from sys.types WHERE name in ('varchar','nvarchar','char','nchar')) IF (@@ROWCOUNT=0) BEGIN SELECT 'Wrong Parameter' RETURN END --動的クエリを組み立てる DECLARE @sql varchar(max) SET @sql = 'SELECT * FROM '+@TABLENAME +' WHERE '+@COLNAME+' LIKE ''%'+@SRCHWORD+'''' EXEC (@sql) END --実行例 EXEC sp_srch 'テーブル名',2,'あ'

hacker_d
質問者

補足

む、むずかしぃ・・・・

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

アプリケーションプログラマの発想で理解はできますが、考えておられるような関数はつくれないです。 テーブル名、列名は動的には指定できません。動的クエリを使うしかないです。

hacker_d
質問者

補足

動的クエリとは何でしょうか?

関連するQ&A