मैं एक खोज इंटरनेट दौर लिया है और कुछ भी सीधे मेल खाता है कि मैं क्या कर रहा हूँ के बाद नहीं मिल सकता है कर सकते हैं ....मैं कैसे LINQ के माध्यम से चर स्तंभ लंबाई लौट SQL को
मैं एक संग्रहीत प्रक्रिया है कि रिटर्न है स्तंभों का एक निश्चित सेट (मान लें कॉलम, कॉलम बी और कॉलमसी) और फिर अतिरिक्त कॉलम के एक अनिश्चित संख्या/हस्ताक्षर (शायद कॉलम, कॉलम और कॉलमएफ, या कॉलमएफ, कॉलमप, कॉलमेट और कॉलमडब्ल्यू) लौटाते हैं।
क्वेरी का गतिशील भाग proc के लिए एक आईडी param द्वारा निर्धारित किया जाता है।
दुर्भाग्यवश मैं स्कीमा के नियंत्रण में नहीं हूं और इसे एक अतिरिक्त तालिका (ओं) के बजाय अंत में जोड़े गए असंबद्ध कॉलम की बहुत बड़ी संख्या के लिए खराब रूप से डिजाइन किया गया है (और वे उन्हें जोड़ते रहते हैं) इसे प्रभावी ढंग से स्टोर करें।
नतीजतन, मैं संकलन समय पर कॉलम का एक निश्चित सेट वापस करने में असमर्थ हूं, इसलिए LINQ से SQL संग्रहीत प्रक्रिया के रिटर्न प्रकार को निर्धारित नहीं कर सकता है।
क्या मेरे पास कोई अन्य विकल्प है, या जिस तरीके से मैं इसे प्राप्त कर सकता हूं? यहां एक उदाहरण दिया गया है कि मैं नीचे क्या कर रहा हूं। क्या मैं LINQ से SQL के साथ काम करने के लिए इसे फिर से लिख सकता हूं? यदि मैं मदद करता हूं तो मैं सी # और एसक्यूएल सर्वर 2008 के साथ एप्लिकेशन लिख रहा हूं।
धन्यवाद।
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
अपने सुझाव के लिए धन्यवाद, मैं इसे अब कि के आधार पर कार्य मिला है। – Michael
@ माइकल सुनकर खुशी हुई :) –