【发布时间】: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