関数へのユーザーの入力に応じて、テーブル値関数の列に名前を付ける方法はありますか?テーブル値関数、動的列名
いくつかの機能があるとします
foo(1,2,3)
だから、3つの整数の入力を取り。テーブルの列名を '1 some text'、 '2 some text'、 '3 some text'のように返すとします。
これは可能ですか?
関数へのユーザーの入力に応じて、テーブル値関数の列に名前を付ける方法はありますか?テーブル値関数、動的列名
いくつかの機能があるとします
foo(1,2,3)
だから、3つの整数の入力を取り。テーブルの列名を '1 some text'、 '2 some text'、 '3 some text'のように返すとします。
これは可能ですか?
をSPを作成してみてください、
CREATE PROCEDURE Foo(@Input1 INT, @Input2 INT, @Input3 INT) AS
DECLARE @X VARCHAR(100)
SET @X = 'Select ' + 'Id ' + ' AS [' + convert(varchar(10), @Input1) + 'SomeText]' +
', FirstName ' + ' AS [' + convert(varchar(10), @Input2) + 'SomeText' + ']' +
', LastName ' + ' AS [' + convert(varchar(10), @Input3) + 'SomeText' + ']' +
' From Emp'
EXEC (@X)
GO
Foo 1, 2, 3
これは動的SQLを使用することで実現できますが、関数内で使用することはできません。あなたはSPのアプローチが必要な場合は、使用してそれを拡張することができます。..
番号テーブル値関数 - マルチステートメントのTVF、インラインTVF、またはSQLCLR TVF - - 一貫性のある/決定論的な結果セットを返す必要があります。これは、常に同じデータ型を返す必要があるScalar UDF(T-SQLおよびSQLCLR)に似ています。
実際、TVFのタイプに関係なく、TVFによって返される結果セットは、TVFの作成時にシステムメタデータで定義され、実行時には変更できません。あなたは次のクエリを使用して定義を見ることができます:
SELECT so.type_desc AS [ObjectType], so.[name] AS [ObjectName], sc.*
FROM sys.columns sc
INNER JOIN sys.objects so
ON so.[object_id] = sc.[object_id]
WHERE so.type_desc NOT IN ('SYSTEM_TABLE', 'USER_TABLE', 'INTERNAL_TABLE',
'VIEW', 'TYPE_TABLE')
ORDER BY so.[type_desc], so.[name], sc.column_id;
ObjectType
ためには、以下の値を持つエントリを取り戻すことができます。
あなたは関数引数をaとして追加しようとしましたか?結果セットのlias名!? – Lucky
私はそれについて考えなかった、それを試してみましょう。 –
その構文は何ですか?これはうまくいかないようです:INSERT INTO \ @Table SELECT \ @ parameter1 as(\ @ parameter1 + 'some text') –