如何将数据从许多PC保存到一个表SQL

时间:2017-07-19 06:10:28

标签: c# sql-server asp.net-mvc

我想将一些数据从许多PC保存到一个表中。但是数据有一个手动填充的索引(ID)和先前数据(ID)的顺序,所以我先在数据库上检查它然后递增它。问题是如果多个PC /设备一起保存,它将保存相同结果。如何解决这个问题?

这是查询使用的最后一个ID:

> public DataRow GetPlayerIDByClient(object clientPK)
>         {
>             DataRow result = null;
>  
>             if (clientPK != null)
>             {
>                 IDbDataParameter clientFKParam = this.CreateParameter(csPlayerNamesEntity.Names.ClientFK, clientPK);
>  
>                 string selectCommand = string.Format("SELECT TOP 1 * FROM {0} WHERE {1} = {3} AND " +
>                                                         "({2} LIKE 'G%' or {2} LIKE 'g%') ORDER BY {4} DESC",
>                                                         csPlayerNamesEntity.Names.TableName, //0
>                                                         csPlayerNamesEntity.Names.ClientFK, //1
>                                                         csPlayerNamesEntity.Names.ID,//2
>                                                         clientFKParam,//3
>                                                         csPlayerNamesEntity.Names.PK); //4
>  
>                 DataTable dt = this.ExecReaderDataTable(selectCommand, clientFKParam);
>  
>                 if (dt != null && dt.Rows.Count > 0)
>                 {
>                     result = dt.Rows[0];
>                 }
>             }
>  
>             return result;
>         }

1 个答案:

答案 0 :(得分:0)

如果您有从多个来源更新的表,并且您需要确保正确设置ID,则有两种相当常见的解决方案。

一种方法是使主键成为一个标识列,该列在SQL Server本身上递增。如果您在SQL Server中需要此值,则可以在最后使用SELECT SCOPE_IDENTITY()构造INSERT SQL,以便将Id返回给您的应用程序。插入内容的两个程序/机器将由SQL Server编组,您将不会获得重叠的ID。

另一种方法是使列成为UNIQUEIDENTIFIER并从您的应用程序提供Guid。由于它们是独特的,无论来源如何,它们不同的机器/过程都不会发生冲突。但是,对于大型表可能存在性能损失,因为Ids不会是顺序的,并且它将对表进行分段,因为SQL Server必须在插入时对行进行随机排列,以便以正确的顺序为行腾出空间。