【问题标题】:SQL server creating a view with a guid and select distinct clauseSQL Server 使用 guid 和 select distinct 子句创建视图
【发布时间】:2014-12-11 14:43:15
【问题描述】:

我尝试在 C# 应用程序中使用的 SQL Server 数据库中有一个视图,该模型需要一个视图没有的 Key 字段。为了克服这个问题,我将在创建视图时创建一个 guid,但这会导致每一行都不同,因此会否定创建视图中的 SELECT DISTINCT 子句。

我将如何在 SELECT 查询之后创建 GUID 以便只为结果提供一个 guid?

谢谢

更新

感谢到目前为止的所有帮助和 cmets,我已经设法解决了问题,但它并不漂亮,因为我正在努力改进 SQL,我确信有一个更好的解决方案,我有一个看法

CREATE VIEW [dbo].[vw_OpenTradesMarket]
AS

SELECT DISTINCT    TOP (1000)

cast(C.[Link Ref#] AS varchar(max)) as [LinkRef]
,cast(C.[OpenMktBASE] AS varchar(max)) as [Value]
FROM Client AS C

inner JOIN  stgMKTBOTH AS M ON C.[Link Ref#] = M.[Link Ref#]

然后我使用 row_numberer() 创建该表的视图以创建编号表

CREATE VIEW vw_OpenTradesTest2
AS 
SELECT 
*
, Row_number() over ( Order by LinkRef) as [Id]
From dbo.vw_OpenTradesMarket  

就像我说的,它有效,但它并不漂亮,你们能改进一下吗?

再次感谢!

【问题讨论】:

  • 也许您可以使用 row_number 来代替 guid?以这种方式返回的数据会少很多。您可以将其放入视图中的 cte 中,然后选择 where RowNum = 1。
  • 是否需要为同一行每次生成相同的密钥?
  • 所以如果我有 SELECT DISTINCT Firstname, Surname FROM Table 将其更改为 SELECT NEWID(), Firstname, Surname FROM (SELECT DISTINCT Firstname, Surname FROM Table)?
  • 也许您可以在 C# 中执行此操作 - 使用 EF,例如使用 LINQ?
  • 使用 guid 的问题是它们真的很宽。如果使用 int,则每行返回 16 个字节而不是 4 个字节。

标签: c# sql-server select guid


【解决方案1】:

这是您可以做到这一点的一种方法。不知道你的表是什么样的,所以我创建了虚拟表。

create table Something
(
    SomeVal varchar(10)
)
insert Something
select 'asdf' union all 
select 'asdf' union all 
select 'qwer' union all 
select 'qwer'

go

create view MyView as
    select SomeVal, ROW_NUMBER() over (order by SomeVal) as RowNum
    from Something
    group by SomeVal

go

select *
from MyView

go

drop view MyView
drop table Something

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多