C# 从任何SQL查询/视图/CTE返回Top 1
有没有办法只返回一条记录,这样我就可以通过下面的代码获得所有列调用C# 从任何SQL查询/视图/CTE返回Top 1,c#,sql,sql-server,tsql,sql-order-by,C#,Sql,Sql Server,Tsql,Sql Order By,有没有办法只返回一条记录,这样我就可以通过下面的代码获得所有列调用 using (var reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess).ConfigureAwait(false)) { DataTable dtResults = new DataTable(); dtResults.Load(reader); return dtResults; } 现在,这将从查
using (var reader = await command.ExecuteReaderAsync(CommandBehavior.SequentialAccess).ConfigureAwait(false))
{
DataTable dtResults = new DataTable();
dtResults.Load(reader);
return dtResults;
}
现在,这将从查询中返回所有X条记录,我只需要返回1条记录,这样我就可以将列数据类型等插入到我的网格控件中
我们不能只添加选择Top1
,因为有些查询以CTE等开头
我们不能将它包装到另一个查询中,因为有时查询具有orderbys
我们不能强迫用户添加一个单独的查询来模拟我们想要做的事情
以下是错误:
味精1033,第15级,状态1,第40行ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML 以下是查询:
SELECT TOP 1 *
FROM
(SELECT O.Department, O.ID
FROM dbo.table1 e
LEFT JOIN dbo.table2 O ON e.Department = O.Department
ORDER BY ID) x
请尝试以下操作,您不能在SQL server中将
Order by
与子查询一起使用
select top 1 *
from
(
SELECT
O.Department
,O.ID
FROM dbo.table1 e
LEFT JOIN dbo.table2 O
ON e.Department = O.Department
)
Order by
ID
你应该做你想做的。它将返回有关命令的元数据
exec sp_describe_first_result_set @tsql = N'SELECT O.Department, O.ID
FROM dbo.table1 e
LEFT JOIN dbo.table2 O ON e.Department = O.Department
ORDER BY ID'
子查询是不必要的。您可以在外部查询中直接使用
top(1)
和order by
:
select top(1) o.department, o.id
from dbo.table1 e
left join dbo.table2 o on e.department = o.department
order by id
如果只需要元数据,请使用
.ExecuteReader(System.Data.CommandBehavior.SchemaOnly)
如果要读取一行,请使用SQL的OFFSET/FETCH子句。它们附加在语句的末尾,因此可能适用于您的案例
请注意,您必须提供一些订购条款
SELECT
O.Department
,O.ID
FROM dbo.table1 e
LEFT JOIN dbo.table2 O
ON e.Department = O.Department
order by O.ID
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
只需运行
reader。读取一次
,不要将其加载到数据表
。