我有一个包含动态sql的存储过程来返回结果集。查询运行正常,但我不能通过Linq使用它到sql。似乎数据类设计者认为查询只包含一列(位置)而不是正确的数字。
我猜它是因为动态sql意味着列在设计时不可用。查询是这样的:
set @query = 'select ' + char(13) +
'case when a.location is not null then upper(left(a.location, 1)) + right(a.location, len(a.location) - 1) else ''All'' end as Location' + char(13) + @strsql +
'group by ' + char(13) +
'rollup(location)' + char(13)
其中@strsql是一个字符串,其中包含引用其余列的查询的其余部分。
有没有人知道克服这种限制的方法(除了当然不使用动态sql)?
由于
答案 0 :(得分:4)
使用具有适当列数的非动态语句暂时替换存储过程中的sql。将它添加到DBML文件&保存(重新生成C#代码)。将原始SQL替换为存储过程。
除非你删除&将存储过程重新添加到DBML文件中,VisualStudio不应该再次查看存储过程本身。
/*
set @query = 'select ' + char(13) + 'case when a.location is not null then
upper(left(a.location, 1)) + right(a.location, len(a.location) - 1)
else ''All'' end as Location' + char(13) + @strsql + 'group by '
+ char(13) + 'rollup(location)' + char(13)
*/
select 'a' as Location, 'b' as othercol, 'c' as col3
这当然假设strsql中的列数是固定的,具有一致的名称。如果没有,那么你正在达到C#的限制,而不是Linq。