标签: sql-server-2005

从多列中选择最小值的最佳方法是什么?

给出SQL Server 2005中的下表:

ID   Col1   Col2   Col3
--   ----   ----   ----
1       3     34     76  
2      32    976     24
3       7    235      3
4     245      1    792
Run Code Online (Sandbox Code Playgroud)

编写产生以下结果的查询的最佳方法是什么(即产生最终列的查询 - 包含每行的Col1,Col2和Col3中的minium值的)?

ID   Col1   Col2   Col3  TheMin
--   ----   ----   ----  ------
1       3     34     76       3
2      32    976     24      24
3       7    235      3       3
4     245      1    792       1
Run Code Online (Sandbox Code Playgroud)

更新:

为了澄清(正如我在演讲中所说),在真实场景中,数据库已正确规范化.这些"数组"列不在实际表中,而是在报表中所需的结果集中.新要求是报告还需要此MinValue列.我无法更改基础结果集,因此我期待T-SQL获得一个方便的"走出监狱卡".

我尝试了下面提到的CASE方法并且它有效,尽管它有点麻烦.它也比答案中说明的更复杂,因为你需要满足同一行中有两个最小值的事实.

无论如何,我想我会发布我目前的解决方案,鉴于我的限制,它的效果非常好.它使用UNPIVOT运算符:

with cte (ID, Col1, Col2, Col3)
as
(
    select ID, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-server-2005 min

67
推荐指数
9
解决办法
20万
查看次数

导入包错误 - 无法在Unicode和非Unicode字符串数据类型之间进行转换

我使用SQL Server 2008在我的计算机上创建了一个dtsx包.它将数据从分号分隔的csv文件导入到一个表中,其中所有字段类型都是NVARCHAR MAX.

它适用于我的计算机,但它需要在客户端服务器上运行.每当他们使用相同的csv文件和目标表创建相同的包时,他们就会收到上述错误.

我们已经逐步完成了包的创建,一切似乎都没问题.映射都是正确的,但是当它们在最后一步中运行包时,它们会收到此错误.他们正在使用SQL Server 2005.

任何人都可以建议从哪里开始寻找这个问题?

unicode types ssis sql-server-2005 non-unicode

64
推荐指数
6
解决办法
24万
查看次数

索引键列VS索引包含列

有人可以解释这两个 - 索引关键列VS索引列?

目前,我的索引有4个索引键列和0个包含列.

谢谢

t-sql sql-server-2005

64
推荐指数
3
解决办法
2万
查看次数

我可以在没有DEFAULT值的情况下添加非空列

我可以添加一个我指定为NOT NULL的列,我不想指定DEFAULT值,但是MS-SQL 2005说:

ALTER TABLE只允许添加可以包含空值的列,或者指定了DEFAULT定义,或者添加的列是标识或时间戳列,或者如果以前的条件都不满足,则表必须为空以允许添加这个专栏.列'test'不能添加到非空表'shiplist'中,因为它不满足这些条件.

如果是,请告诉我语法,如果不,请说明原因.

sql t-sql sql-server sql-server-2005

64
推荐指数
4
解决办法
7万
查看次数

SQL Server中的参数嗅探(或欺骗)

不久之前,我有一个查询,我为我的一个用户运行了很多.它仍然在进化和调整,但最终它稳定并且运行得非常快,所以我们从中创建了一个存储过程.

到目前为止,这是正常的.

但是,存储过程很慢.查询和proc之间没有实质性差异,但速度变化很大.

[后台,我们正在运行SQL Server 2005.]

友好的本地DBA(不再在这里工作)看了一下存储过程并说"参数欺骗!" (编辑:虽然它似乎也可能被称为'参数嗅探',这可能解释了当我试图搜索它时谷歌的点击率很低.)

我们将一些存储过程抽象到第二个存储过程,将对这个新内部过程的调用包装到预先存在的外部过程中,称为外层过程,嘿,它与原始查询一样快.

那么,是什么给出的?有人可以解释参数欺骗吗?

奖金积分

  • 强调如何避免它
  • 建议如何识别可能的原因
  • 讨论替代策略,例如统计数据,指数,关键,以减轻这种情况

t-sql sql-server sql-server-2005 parameter-spoofing

63
推荐指数
5
解决办法
3万
查看次数

如何将SQL Server 2005查询导出为CSV

我想将一些SQL Server 2005数据导出为CSV格式(用逗号分隔引号).我可以想到很多复杂的方法,但我想以正确的方式做到这一点.我看过bcp,但我无法弄清楚如何在字段周围添加引号(除了将它们连接到字段值,这很难看).我想我可以用sqlcmd和-o做到这一点,但出于同样的原因,这似乎很难看.

有没有bcp方式来做到这一点?

有合理的sqlcmd方法吗?

管理工作室内置了一些非常简单的实用工具吗?

sql-server bcp sql-server-2005 sqlcmd

63
推荐指数
7
解决办法
19万
查看次数

创建和填充数字表的最佳方法是什么?

我已经看到了许多不同的方法来创建和填充数字表.但是,创建和填充一个的最佳方法是什么?从最重要到最不重要的"最佳"被定义:

  • 使用最佳索引创建的表
  • 行生成最快
  • 用于创建和填充的简单代码

如果你不知道数字表是什么,请看这里:我为什么要考虑使用辅助数字表?

sql-server sql-server-2005

62
推荐指数
6
解决办法
9万
查看次数

如何将刻度转换为日期格式?

我正在将ticks值转换为这样的日期:

Convert(datetime, (MachineGroups.TimeAdded - 599266080000000000)/864000000000);
Run Code Online (Sandbox Code Playgroud)

使用这个我得到:

9/27/2009 10:50:27 PM
Run Code Online (Sandbox Code Playgroud)

但我想要这种格式的日期:

October 1, 2009
Run Code Online (Sandbox Code Playgroud)

我的样本滴答值是

633896886277130000
Run Code Online (Sandbox Code Playgroud)

做这个的最好方式是什么?

c# sql-server asp.net sql-server-2005

62
推荐指数
3
解决办法
11万
查看次数

如何在SQL Server中执行重音不敏感比较(e与è,é,ê和ë)?

我想在SQL中比较两个varchars,一个是类似的Cafe,另一个Café在SQL中有一种方法可以比较两个值.例如:

SELECT *
FROM Venue
WHERE Name Like '%cafe%'
Run Code Online (Sandbox Code Playgroud)

那么,如果有一个名称的场所,Big Bobs Café Extraordinaire它将被包含在结果集中?

t-sql sql-server-2005 collation

62
推荐指数
3
解决办法
7万
查看次数

如何检查SQL Server 2005中是否存在非聚簇索引

我有以下内容:

CREATE NONCLUSTERED INDEX [MyTableIndex]
ON [dbo].[tablename] ([tablename_ID],[tablename_Field1])
INCLUDE ([Tablename_Field2],[Tablename_Field3])
Run Code Online (Sandbox Code Playgroud)

我想创建一个if语句来检查它是否存在.我该怎么做呢?

sql-server-2005 non-clustered-index

62
推荐指数
2
解决办法
5万
查看次数