インターネットで検索したところ、自分が探しているものに直接一致するものが見つかりませんでした。
固定された列のセット(たとえば、ColumnA、ColumnB、およびColumnC)を返し、さらに追加の列(ColumnD、ColumnE、およびColumnF、またはColumnF、ColumnP、ColumnT、およびColumnW)の不確定な数/署名を返すストアドプロシージャがあります。 。
クエリの動的な部分は、procへのIdパラメータによって決定されます。
残念ながら、私はスキーマを制御できず、これを効果的に格納するための追加のテーブルではなく、非常に多くの無関係な列を最後に追加するように設計されていません(そしてそれらは追加し続けます)。
その結果、コンパイル時に確定した列のセットを返すことができないため、LINQtoSQLはストアドプロシージャの戻りタイプを判別できません。
他にオプションはありますか、またはこれを回避する方法はありますか?これが私が以下で行っていることの例です。LINQ to SQLで動作するようにこれを書き直すことはできますか?それが助けになるなら、私はC#とSQLServer2008でアプリケーションを書いています。
ありがとう。
CREATE PROCEDURE [Foo].[GetBar]
(
@Id INT,
@FooVar VARCHAR(50),
@BarVar DATE
)
AS
BEGIN
CREATE TABLE #TempTbl
(
[ColumnName] VARCHAR(50)
)
INSERT #TempTbl EXEC [Foo].GetColumnNames @Id
DECLARE @ColumnNameList NVARCHAR(max)
SET @ColumnNameList = ''
SELECT @ColumnNameList = COALESCE(@ColumnNameList + '],[', '') + ColumnName FROM #TempTbl
DROP TABLE #TempTbl
SELECT @ColumnNameList = @ColumnNameList + ']'
SELECT @ColumnNameList = SUBSTRING(@ColumnNameList, 3, LEN(@ColumnNameList) )
DECLARE @FixedColumns VARCHAR(200)
DECLARE @SelectQuery NVARCHAR(max)
DECLARE @WhereQuery VARCHAR (100)
DECLARE @FullQuery NVARCHAR(max)
DECLARE @ParamaterDef nvarchar (100)
DECLARE @Foo VARCHAR(50)
DECLARE @Bar DATE
SET @FixedColumns = N'[ColumnA], [ColumnB], [ColumnC], '
SET @SelectQuery = N'SELECT ' + @FixedColumns + @ColumnNameList + N' FROM [Foo].[FooBar] '
SET @WhereQuery = N'WHERE [Foo] = @Foo AND [Bar] = @Bar'
SET @FullQuery = @SelectQuery + @WhereQuery
SET @ParamaterDef = N'@Foo VARCHAR(50), @Bar DATE'
EXECUTE sp_executesql @FullQuery, @ParamaterDef, @Foo = @FooVar, @Bar = @BarVar
END