我已经写了一个存储过程,如果存在一个logging将做更新,否则将做一个插入。 它看起来像这样: update myTable set Col1=@col1, Col2=@col2 where ID=@ID if @@rowcount = 0 insert into myTable (Col1, Col2) values (@col1, @col2) 我这样写它的逻辑是,更新将使用where子句执行隐式select,如果返回0则插入将发生。 这样做的替代方法是做一个select,然后根据返回的行数进行更新或插入。 这是我认为效率低下,因为如果你要更新它会导致2select(第一个显式select调用,第二个隐含在更新的位置)。 如果proc做插入,那么效率就不会有差别。 我的逻辑在这里发声吗? 这是如何将一个插入和更新结合到一个存储过程?
在SQL Server 2005中,我有一个表cm_production,列出了所有已投入生产的代码。 该表有一个ticket_number,program_type和程序名和push_number连同其他一些列。 目标:按程序types和推送号码统计所有的DISTINCT程序名称 我到目前为止是: SELECT DISTINCT COUNT(*) AS Count, program_type AS [Type] FROM cm_production WHERE push_number=@push_number GROUP BY program_type 这让我在那里,但它计数所有的程序名称,而不是独特的(我不希望它在该查询中)。 我想我只是不能包装我的头如何告诉它只计算不同的程序名称,而不select它们。 或者其他的东西。
如果我想保存表中以前保存在SQL Server Management Studio中的任何更改(表中没有数据),则会收到一条错误消息: 保存更改是不允许的。 您所做的更改需要删除并重新创build以下表格。 您要么对无法重新创build的表进行更改,要么已启用“禁止保存需要重新创build表的更改”选项。 什么可以防止表容易编辑? 或者,是SQL Server Management Studio需要重新创build表进行编辑的常用方法吗? 这是什么 – 这个“选项防止保存更改” ?
我一直在和一位同事一起研究CROSS / OUTER APPLY ,我们正在努力寻找使用它们的真实例子。 我花了相当多的时间看我什么时候应该使用内部join交叉应用? 和谷歌search,但主要(唯一)的例子似乎很奇怪(使用表中的行数来确定从另一个表中select多less行)。 我认为这种情况可能会从OUTER APPLY受益: 联系人表(每个联系人包含1条logging)通讯条目表(每个联系人可包含n个电话,传真,电子邮件) 但是使用子查询,公用表expression式,带RANK()和OUTER APPLY OUTER JOIN似乎都是一样的。 我猜这意味着这种情况不适用于APPLY 。 请分享一些真实生活的例子,并帮助解释function!
我试图从一个表中select一些字段,并从存储过程中插入到现有的表中。 这是我正在尝试的: SELECT col1, col2 INTO dbo.TableTwo FROM dbo.TableOne WHERE col3 LIKE @search_key 我认为select into是临时表,这就是为什么我得到一个dbo.TableTwo已经存在的错误。 如何从dbo.TableOne插入多行到dbo.TableTwo ?
table1(id,名字) 表2(id,名称) 查询: SELECT name FROM table2 — that are not in table1 already
我需要实现WCF服务请求的排队机制。 该服务将被客户以单向的方式调用。 这些请求消息应该存储在SQL Server数据库中,并且Windows服务将消息排队。 处理请求的时间将是可configuration的。 如果在处理消息时出现错误,则需要重试100次,如果仍然失败,则需要终止。 还应该有一个机制来监测一天中进行的交易次数和失败次数。 质询 如果我使用MSMQ,则客户端可能已经将消息转发到队列,而不知道服务端点。 但是我正在使用SQL Server来存储请求消息。 客户端如何将请求发送到SQL Server? 解决scheme是否可行? 我们是否有任何文章/书籍解释如何实现上述? 在这种情况下,防止服务和客户端达到故障状态的步骤是什么? 将传入消息存储到数据库的最佳方法是什么? 实施重试机制的最佳方法是什么? 任何事情已经存在,所以我不必重新发明轮子? 有没有解释这个实现的书/文章? 笔记 消息的内容将是复杂的XML。 例如员工的差旅费用项目或员工名单。 读 将WCF请求logging到数据库 保证WCF服务中的数据处理 MSMQ与SQL Server Service Broker的比较 是否有可能坚持,然后将WCF消息转发到目标服务? WCF 4路由服务 – 协议桥接问题 https://softwareengineering.stackexchange.com/questions/134605/designing-a-scalable-and-robust-retry-mechanism 集成SQL Service Broker和NServiceBus 用户是否也可以在NServiceBus中发布/发送消息?
我有一种情况,我需要从一个表中获取“数量消耗”,并将其应用于具有一个或多个“批量”数量的行的第二个表。 我不确定如何更好地描述它,下面是我从表格的angular度来看: Table Pooled_Lots —————————- Id Pool Lot Quantity 1 1 1 5 2 1 2 10 3 1 3 4 4 2 1 7 5 3 1 1 6 3 2 5 Table Pool_Consumption —————————- Id PoolId QuantityConsumed 1 1 17 2 2 8 3 3 10 我需要一个SQL查询结果行集,看起来像这样: Pool Lot Quantity QuantityConsumed RunningQuantity RemainingDemand […]
我想find多个列的最大值。 MySQL支持GREATEST函数,但SQL Server不支持。 在SQL Server 2008中是否有类似这样的function?
我是SQL Server开发新手。 我的大部分经验都是用Oracle完成的。 假设我有下面的表包含约会对象 CREATE TABLE [dbo].[Appointments]( [AppointmentID] [int] IDENTITY(1,1) NOT NULL, ……. [AppointmentDate] [datetime] NOT NULL, [PersonID] [int] NOT NULL, [PrevAppointmentID] [int] NULL, CONSTRAINT [PK_Appointments] PRIMARY KEY CLUSTERED ([AppointmentID] ASC) 约会可以推迟,所以当发生这种情况时,会在表上创build一个新的行,其中PrevAppointmentID字段包含原始约会的ID。 我想查询获取一个人约会的历史。 例如,如果ID = 1的任命推迟了两次,并且这些延期已经为同一个PersonID创build了ID = 7和ID = 12的约会,我想进行一个查询,返回以下结果: AppointmentID PrevAppointmentID —————– ———————- 1 NULL 7 1 12 7 如果使用Oracle,我记得使用CONNECT BY PRIOR子句可以得到类似这样的东西。 有没有什么办法来查询来实现这些结果? 我正在使用SQL […]