linq在开发工具中拉出是由动态存储过程执行的存储过程的时候,返回值是一个int类型。
但是我们执行的存储过程返回要是一张表,这时候linq的一些不足就暴露出来了。不能识别动态语言编写的存储过程返回值,怎么能够让它返回一张表,请大家帮帮忙呀,而且我的表名是不确定的,存储过程如下:
IF EXISTS(SELECT Name FROM SYSOBJECTS WHERE Name='sp_SearchMetaData')
DROP PROCEDURE sp_SearchMetaData
GO
CREATE PROCEDURE sp_SearchMetaData
(
@DataBase NVARCHAR(100),
@DataTable NVARCHAR(100)
)
AS
DECLARE @Data NVARCHAR(200)
DECLARE @varColumns NVARCHAR(300)
SET @Data=@DataBase+'.dbo.'+@DataTable
EXEC('SELECT * FROM '+@Data)
GO
其实有一种更简单的解决办法,
linqtosql还有一个方法,ExceuteCommand
用这个传递查询语句更方便。如果觉得每次都传递“select * from {0}",干脆做一个扩展方法。
总之解决问题就OK。