103得票6回答
按组检索n行

我经常需要从结果集中的每个组中选择若干行。 例如,我可能想要列出每个客户的最高或最低的'n'个最近订单值。 在更复杂的情况下,要列出的行数可能因分组/父记录的属性而异。这部分绝对是可选的/额外加分项,并不意味着阻止人们回答。 在SQL Server 2005及更高版本中,解决这些问题的主...

79得票1回答
合并目标表的一个子集

我正试图使用MERGE语句向表中插入或删除行,但我只想对其中的一部分行进行操作。关于MERGE的文档有一个非常明确的警告: 重要的是只指定用于匹配目的的目标表列。也就是说,指定来自目标表的列与源表的相应列进行比较。不要尝试通过在ON子句中过滤目标表中的行(例如通过指定AND NOT tar...

65得票4回答
SQL Server的CASE语句会评估所有条件还是在第一个TRUE条件时退出? SQL Server的CASE语句会按顺序评估每个条件,直到找到第一个满足条件的表达式。一旦找到满足条件的表达式,CASE语句将返回该表达式的结果并退出。如果没有任何条件满足,那么CASE语句将返回ELSE子句中指定的默认值(如果有的话)。因此,CASE语句不会继续评估后续条件。

SQL Server(特指2008或2012版本)的CASE语句是否会评估所有的WHEN条件,还是一旦找到一个评估为true的WHEN子句就退出?如果它确实要遍历整个条件集合,那么最后一个评估为true的条件是否会覆盖第一个评估为true的条件所做的操作?例如: SELECT CAS...

63得票6回答
使用窗口函数的日期范围滚动求和

我需要在一个日期范围内计算滚动总和。举个例子,使用AdventureWorks示例数据库,下面的假设语法将完全满足我的需求: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum4...

53得票4回答
在SQL Server中,创建一个能够保存存储过程结果的临时表最简单的方法是什么?

许多时候我在处理SQL Server时需要写类似以下的内容。 create table #table_name ( column1 int, column2 varchar(200) ... ) insert into #table_name execute som...

53得票2回答
如何创建Unicode参数和变量名称

所有这些都有效: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCH...

49得票8回答
将选择结果写入CSV文件

我们需要将SELECT查询结果写入csv文件。在SQL Server 2008 r2中,如何使用T-SQL来实现?我知道可以在SSIS中完成,但由于某些原因,我们没有这个选项。 我尝试使用下面文章中提到的存储过程,但当我运行存储过程时,SQL抱怨无法运行sys.sp_OACreate和sys...

46得票9回答
被要求不使用事务,并使用一种变通方法来模拟事务。

我已经开发T-SQL数年,并一直深入挖掘,继续学习语言的各个方面。最近我开始在一家新公司工作,收到了一个我认为很奇怪的有关事务的建议。永远不要使用它们。相反,使用模拟事务的解决方法。这是来自我们的DBA的建议,他在一个具有大量事务和随之而来的大量阻塞的数据库中工作。我主要工作的数据库没有遇到这...

42得票4回答
存储过程的输出参数作为表值参数

可以将表值参数用作存储过程的输出参数吗? 以下是我想在代码中实现的内容。 /*First I create MY type */ CREATE TYPE typ_test AS TABLE ( id int not null ,name varchar(50) not ...