Tôi đã tìm kiếm trên internet và không thể tìm thấy bất kỳ thứ gì khớp trực tiếp với những gì tôi đang theo dõi.Làm thế nào tôi có thể trả về độ dài cột biến thông qua LINQ to SQL
Tôi có một thủ tục được lưu trữ một tập hợp các cột cố định (giả sử ColumnA, ColumnB và ColumnC) và sau đó trả về một số không xác định/chữ ký của các cột bổ sung (có thể là ColumnD, ColumnE và ColumnF, hoặc ColumnF, ColumnP, ColumnT và ColumnW).
Phần động của truy vấn được xác định bởi thông số Id cho proc.
Thật không may là tôi không kiểm soát được lược đồ và nó đã được thiết kế kém để có một số lượng lớn các cột không liên quan được thêm vào cuối (và họ tiếp tục thêm chúng), thay vì có thêm (các) bảng lưu trữ hiệu quả.
Kết quả là, tôi không thể trả về một tập hợp các cột xác định tại thời gian biên dịch, vì vậy LINQ to SQL không thể xác định kiểu trả về của thủ tục được lưu trữ.
Tôi có bất kỳ tùy chọn nào khác hoặc cách tôi có thể giải quyết vấn đề này không? Đây là một ví dụ về những gì tôi đang làm bên dưới. Tôi có thể viết lại để làm việc với LINQ to SQL không? Tôi đang viết các ứng dụng với C# và SQL Server 2008 nếu điều đó giúp.
Cảm ơn.
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
Cảm ơn đề nghị của bạn, tôi đã nhận nó làm việc bây giờ dựa trên đó. – Michael
@Michael vui mừng khi nghe :) –