Questions tagged «t-sql»

Transact-SQL(T-SQL)是Microsoft SQL Server和SAP的Sybase使用的SQL的方言。


6
每组检索n行
我经常需要从结果集中的每个组中选择一些行。 例如,我可能想列出每个客户的'n'个最高或最低最近订单值。 在更复杂的情况下,每个组要列出的行数可能有所不同(由分组/父记录的属性定义)。这部分绝对是可选的/为了获得额外的荣誉,并不旨在阻止人们回答。 解决SQL Server 2005及更高版本中此类问题的主要选项是什么?每种方法的主要优点和缺点是什么? AdventureWorks示例(为清楚起见,可选) TransactionHistory对于每个以M到R(含)开头的字母的产品,从表中列出五个最近的交易日期和ID 。 再次相同,但是n每个产品都有历史记录行,其中n是DaysToManufacture产品属性的五倍。 相同,在特殊情况下,每个产品只需要一个历史记录行(单个最近的条目,由TransactionDate,打破平局)TransactionID。

1
合并目标表的子集
我正在尝试使用一条MERGE语句从表中插入或删除行,但是我只想对这些行的子集进行操作。的文档中MERGE有一个措辞非常强烈的警告: 重要的是仅指定目标表中用于匹配目的的列。即,指定目标表中与源表的相应列进行比较的列。不要尝试通过过滤掉ON子句中的目标表中的行来提高查询性能,例如通过指定AND NOT target_table.column_x = value。这样做可能会返回意外和错误的结果。 但这正是我要做的MERGE工作。 我拥有的数据是一个标准的项目对类别的多对多联接表(例如,哪些项目包括在哪些类别中),如下所示: CategoryId ItemId ========== ====== 1 1 1 2 1 3 2 1 2 3 3 5 3 6 4 5 我需要做的是用新的项目列表有效地替换特定类别中的所有行。我最初的尝试是这样的: MERGE INTO CategoryItem AS TARGET USING ( SELECT ItemId FROM SomeExternalDataSource WHERE CategoryId = 2 ) AS SOURCE ON SOURCE.ItemId = …

6
使用窗口功能的日期范围滚动总和
我需要计算日期范围内的滚动总和。为了说明这一点,使用AdventureWorks示例数据库,以下假设语法将完全满足我的需要: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = SUM(TH.ActualCost) OVER ( PARTITION BY TH.ProductID ORDER BY TH.TransactionDate RANGE BETWEEN INTERVAL 45 DAY PRECEDING AND CURRENT ROW) FROM Production.TransactionHistory AS TH ORDER BY TH.ProductID, TH.TransactionDate, TH.ReferenceOrderID; 可悲的是,RANGE窗口框架范围当前在SQL Server中不允许间隔。 我知道我可以使用子查询和常规(非窗口)聚合来编写解决方案: SELECT TH.ProductID, TH.TransactionDate, TH.ActualCost, RollingSum45 = ( SELECT SUM(TH2.ActualCost) FROM Production.TransactionHistory AS TH2 …

2
如何创建Unicode参数和变量名
所有这些工作: CREATE DATABASE [¯\_(ツ)_/¯]; GO USE [¯\_(ツ)_/¯]; GO CREATE SCHEMA [¯\_(ツ)_/¯]; GO CREATE TABLE [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯] NVARCHAR(20)); GO CREATE UNIQUE CLUSTERED INDEX [¯\_(ツ)_/¯] ON [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]); GO INSERT INTO [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]([¯\_(ツ)_/¯]) VALUES (N'[¯\_(ツ)_/¯]'); GO CREATE VIEW [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[¯\_(ツ)_/¯]; GO CREATE PROC [¯\_(ツ)_/¯].[sp_¯\_(ツ)_/¯] @Shrug NVARCHAR(20) AS SELECT [¯\_(ツ)_/¯] FROM [¯\_(ツ)_/¯].[vw_¯\_(ツ)_/¯] …

4
在SQL Server中创建可以保存存储过程结果的临时表的最简单方法是什么?
很多时候,在处理SQL Server时,我需要编写如下内容。 create table #table_name ( column1 int, column2 varchar(200) ... ) insert into #table_name execute some_stored_procedure; 但是,创建一个具有与存储过程相同的语法的表是一项繁琐的任务。例如,sp_helppublication的结果有48列!我想知道是否有任何简单的方法可以做到这一点。 谢谢。

5
SQL Server CASE语句是否评估所有条件或在第一个TRUE条件下退出?
SQL Server(特别是2008或2012)CASE语句会评估所有WHEN条件,还是在找到WHEN评估结果为true 的子句后退出?如果确实要经历整个条件集,这是否意味着最后一个评估为true的条件会覆盖第一个评估为true的条件?例如: SELECT CASE WHEN 1+1 = 2 THEN'YES' WHEN 1+1 = 3 THEN 'NO' WHEN 1+1 = 2 THEN 'NO' END 即使最后一个条件将其评估为“否”,结果仍为“是”。似乎一旦找到第一个TRUE条件就退出。有人可以确认是否是这种情况。
44 sql-server  t-sql  case 

9
要求不要使用事务并使用替代方法来模拟事务
我从事T-SQL的开发已经有好几年了,并且一直在不断深入研究,继续学习有关该语言各个方面的所有知识。我最近开始在一家新公司工作,收到了我认为关于交易的奇怪建议。永远不要使用它们。而是,使用一种模拟交易的解决方法。这来自于我们的DBA,该DBA在一个数据库中处理大量事务,并随后进行大量阻塞。我主要工作的数据库没有出现此问题,并且我看到过去使用过事务。 我了解交易会受到阻碍,因为这样做本质上就是这样做的,如果您不使用任何交易就可以逃脱,那就一定要这样做。但是在很多情况下,每个语句必须成功执行。如果失败了,那么所有人都必须提交。 我一直将交易范围保持在尽可能狭窄的位置,始终与SET XACT_ABORT ON结合使用,并且始终在TRY / CATCH中使用。 例: CREATE SCHEMA someschema; GO CREATE TABLE someschema.tableA (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColA VARCHAR(10) NOT NULL ); GO CREATE TABLE someschema.tableB (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColB VARCHAR(10) NOT NULL ); GO CREATE PROCEDURE someschema.ProcedureName @ColA …

8
将选择结果写入CSV文件
我们需要将SELECT查询结果写入一个csv文件。如何在SQL Server 2008 r2中使用T-SQL完成?我知道可以在SSIS中完成,但是由于某些原因,我们没有此选项。 我尝试在下面的文章中使用建议的proc,但是当我运行proc时,SQL抱怨无法运行在此proc中调用的sys.sp_OACreate和sys.sp_OADestroy。 您知道我们如何打开这些组件,或者知道使用T-SQL写入文件的更好方法吗? 提前致谢。

1
在每个T-SQL语句之后执行
在每个SQL语句之后使用GO语句的背后原因是什么?我了解GO表示批处理已结束,并且/或者允许声明声誉,但是在每个声明之后使用它有什么优势。 我只是很好奇,因为很多Microsoft文档等都在每次声明后开始使用它,或者也许我刚刚开始注意到。 还有什么被认为是最佳实践?

3
运行总数与计数?
如标题所示,我需要一些帮助来使T-SQL的运行状况更全面。问题是我需要做的总和是一个计数的总和: sum(count (distinct (customers))) 假设我只运行计数,结果将是: Day | CountCustomers ---------------------- 5/1 | 1 5/2 | 0 5/3 | 5 我需要输出的总和为: Day | RunningTotalCustomers ---------------------- 5/1 | 1 5/2 | 1 5/3 | 6 在使用该coalesce方法之前,我已经完成了总计操作,但从未进行过计数。现在我不知道该怎么做了。
34 sql-server  t-sql 


7
如何判断是否仍在使用SQL Server数据库?
我们正在寻求停用一个仍具有几个数据库的SQL Server实例。 如何判断用户或Web应用程序仍在使用它们? 我发现一个论坛线程具有一个T-SQL查询,您可以运行该查询来检索上一个查询日期。看来可行,但是我想知道此信息是否足够有效以删除数据库。是吗? 如果您有其他方法也有帮助。
33 sql-server  t-sql 

5
逻辑运算符OR AND,条件和条件在WHERE中
让我们检查以下两个语句: IF (CONDITION 1) OR (CONDITION 2) ... IF (CONDITION 3) AND (CONDITION 4) ... 如果CONDITION 1是TRUE,将CONDITION 2被检查吗? 如果CONDITION 3是FALSE,将CONDITION 4被检查吗? 关于以下条件WHERE:SQL Server引擎会优化WHERE子句中的所有条件吗?程序员是否应该以正确的顺序放置条件,以确保SQL Server优化程序以正确的方式解决该问题? 添加: 感谢Jack的链接,这让T-SQL代码感到惊讶: IF 1/0 = 1 OR 1 = 1 SELECT 'True' AS result ELSE SELECT 'False' AS result IF 1/0 = 1 AND 1 = …

1
为什么执行语句的速度取决于网络连接?
看起来执行T-SQL的速度取决于网络连接到服务器的等待时间。我假设如果SQL Server没有什么要报告给客户端的信息,它将一直执行到完成为止,而测试则显示了另一个故事。 create procedure UselessLoop @I int as declare @D datetime = getdate() while @I > 0 set @I -= 1 print datediff(millisecond, @D, getdate()) exec UselessLoop 100000 Server Milliseconds local 53 nearby 63 faraway 660 exec UselessLoop 1000000 Server Milliseconds local 546 nearby 640 faraway 6183 使用SSMS在不同计算机上针对同一服务器执行测试。本地是从服务器执行的,附近是在同一个本地网络上,而遥远是从500公里外的另一个办公室(使用1千兆位光纤连接)执行的。 显然,SQL Server与客户端之间正在进行某种通信,直接取决于所执行语句的数量。 …
31 sql-server  t-sql 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.