Tag: sql

INSERT INTO如果不存在SQL服务器

我有一个数据库结构如下: 用户 userid (Primary Key) username 组 groupid (PK) groupName user_groups userid (Foreign Key) groupid (Foreign Key) 用户第一次登录时,我希望将他们的信息添加到users表中。 所以基本上我想要的逻辑是 if (//users table does not contain username) { INSERT INTO users VALUES (username); } 如何使用SQL Server / C#智能地执行此操作?

将SQL Rank()转换为LINQ,或替代

我有下面的SQL语句,可以按预期/预期工作。 但是我想将它翻译成LINQ语句(Lambda ??),以便它适合我的其余DAL。 但是我无法弄清楚如何在LINQ中模拟Rank()。 我在这里发布它的原因,可能是错误的,是看看是否有人可以替换Rank()语句,以便我可以切换它。 或者,如果有一种方法可以在LINQ中表示Rank() ,也可以理解。 USE CMO SELECT vp.[PersonID] AS [PersonId] ,ce.[EnrollmentID] ,vp.[FirstName] ,vp.[LastName] ,ce.[EnrollmentDate] ,ce.[DisenrollmentDate] ,wh.WorkerCategory FROM [dbo].[vwPersonInfo] AS vp INNER JOIN ( [dbo].[tblCMOEnrollment] AS ce LEFT OUTER JOIN ( SELECT * ,RANK()OVER(PARTITION BY EnrollmentID ORDER BY CASE WHEN EndDate IS NULL THEN 1 ELSE 2 END, EndDate DESC, StartDate DESC) AS […]

使用Critieria API在NHibernate中选择子查询

所以我有一个具有以下结构的SQL查询: select p.* from ( select max([price]) as Max_Price, [childId] as childNodeId from [Items] group by [childId] ) as q inner join [Items] as p on p.[price] = q.[Max_Price] and p.[childId] = q.[childNodeId] 我需要使用Criteria API在NHibernate中重新创建此查询。 我尝试使用子查询API,但似乎要求内部查询返回单个列以检查与外部查询中的属性的相等性。 但是,我回来了两个。 我已经读过这可以通过HQL API完成,但我需要使用Criteria API来完成,因为我们将动态生成这样的查询。 任何人都可以引导我朝着正确的方向前进吗?

C#SqlParameters短手

我正在获取Record对象List的数据并将其内容放入数据库中: // Processes a Record and adds it to the database public bool addRecord(SqlConnection db, List recordsToAdd) { using (SqlCommand command = db.CreateCommand()) { foreach (Record record in recordsToAdd) { // Set the query command text command.CommandText = @”INSERT INTO SMDGROUP_STPRODMASTER (PRODCODE, TOTFREE, TOTPHYS, ITEMTYPE, PRODESC) VALUES (‘@PRODCODE’, ‘@TOTFREE’, ‘@TOTPHYS’, ‘@ITEMTYPE’, ‘@PRODESC’)”; SqlParameter param1 = […]

entity framework – 如何检查表是否存在?

我正在使用entity framework和Code First方法。 基类DbContext具有创建和删除数据库以及检查其存在的function。 我想检查是否存在特殊表(实体)。 是否可以使用框架实现或者我是否需要编写自定义方法? 如果我需要编写自己的实现,那么最通用的方法是什么? 谢谢你的帮助。

EF 6参数嗅探

我有一个动态查询,太大了,无法放在这里。 可以肯定地说,在它的当前forms中,它利用CLR过程根据传递的搜索参数的数量动态地构建连接,然后获取该结果并将其连接到更详细的表以带回对最终用户重要的属性。 我已经将整个查询转换为LINQ to Entities,我发现它生成的SQL足以完成这项工作,无论是通过EF 6运行,查询超时。 获取生成的SQL并在SSMS中运行它在3秒或更短的时间内运行。 我只能想象我的问题是参数嗅探。 我已经尝试更新数据库中每个表的统计信息,但这还没有解决问题。 我的问题是: 我可以通过EF以某种方式嵌入像“OPTION RECOMPILE”这样的选项吗?

在.net的内存数据库中

我如何在.Net的内存数据库中使用SQL? 内存数据库如何工作?

使用SqlBulkCopy将DataTable中的列映射到SQL表

我想知道如何在将数据添加到数据库之前将数据库表中的列映射到c#中的数据表。 using (SqlBulkCopy s = new SqlBulkCopy(conn)) { s.DestinationTableName = destination; s.WriteToServer(Ads_api_ReportData); }

如何防止在没有主键时使用SqlBulkCopy插入重复记录

我收到一个包含数千条记录的每日XML文件,每条记录都是一个商业交易,我需要将其存储在内部数据库中,以便用于报告和计费。 我的印象是每天的文件只包含唯一的记录,但发现我对unique的定义与提供者的定义并不完全相同。 导入此数据的当前应用程序是C#.Net 3.5控制台应用程序,它使用SqlBulkCopy进入MS SQL Server 2008数据库表,其中列与XML记录的结构完全匹配。 每个记录只有100多个字段,并且数据中没有自然键,或者更确切地说,我可以想出的字段,因为复合键最终也必须允许空值。 目前该表有几个索引,但没有主键。 基本上整行必须是唯一的。 如果一个字段不同,则有效插入。 我看了创建整个行的MD5哈希,将其插入数据库并使用约束来阻止SqlBulkCopy插入行,但我不知道如何将MD5哈希进入BulkCopy操作而我不是确定整个操作是否会失败并在任何一个记录失败时回滚,或者它是否会继续。 该文件包含大量记录,在XML中逐行进行,查询数据库以查找与所有字段匹配的记录,然后决定插入实际上是我能够看到能够执行此操作的唯一方法。 我只是希望不必完全重写应用程序,并且批量复制操作要快得多。 有没有人知道一种方法来使用SqlBulkCopy,同时防止重复行,没有主键? 或者以不同的方式做任何建议吗?

SQL查询中使用的表的列表

有没有办法获取SQL查询中使用的表列表? 示例:我有类似的东西: SELECT * FROM Table t JOIN OtherTable ON t.id=OtherTable.t_id 我希望得到 Table, OtherTable 谢谢