Tag: sql server

SQL Server中的临时表和表variables有什么区别?

在SQL Server 2005中,我们可以通过两种方式创build临时表: declare @tmp table (Col1 int, Col2 int); 要么 create table #tmp (Col1 int, Col2 int); 这两者有什么区别? 对于@tmp是否仍然使用tempdb,或者内存中是否发生任何事情,我都读过了相互冲突的意见。 在哪种情况下,一个performance优于另一个?

如何将date时间转换为时间

我使用CAST语法将DateTime字段转换为Time。 select CAST([time] as time) as [CSTTime] DateTime 2015-03-19 00:00:00.000 现在产出:时间03:05:36.0000000 我只需要HH:MM:SS而不是毫秒或0000 如何过滤或将其转换为精确的HH:MM:SS格式。

在NULL上不等于<>!=运算符

有人可以请解释在SQL中的以下行为? SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results) SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results) SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)

如何根据出生date和getDate()计算年龄(以年为单位)

我有一张表列出了他们的出生date(目前是nvarchar(25)) 我怎样才能把它转换成一个date,然后计算他们的年龄? 我的数据如下所示 ID Name DOB 1 John 1992-01-09 00:00:00 2 Sally 1959-05-20 00:00:00 我想看看: ID Name AGE DOB 1 John 17 1992-01-09 00:00:00 2 Sally 50 1959-05-20 00:00:00

SET NOCOUNT ON用法

受到SET NOCOUNT有不同观点的这个问题的启发… 我们应该使用SQL Server的SET NOCOUNT ON吗? 如果没有,为什么不呢? 它的作用编辑6,2011年7月22日 它抑制任何DML之后的“xx rows affected”消息。 这是一个结果集,当发送时,客户端必须处理它。 它很小,但是可以测量(见下面的答案) 对于触发器等,客户端将收到多个“受影响的xx行”,这会导致一些ORM,MS Access,JPA等所有错误的方式(见下面的编辑) 背景: 一般接受的最佳实践(我认为,直到这个问题)是在SQL Server中的触发器和存储过程中使用SET NOCOUNT ON 。 我们在任何地方都使用它,并且快速的谷歌显示了许多SQL Server MVP也同意。 MSDN说这可以打破.net SQLDataAdapter 。 现在,这意味着SQLDataAdapter仅限于完全简单的CRUD处理,因为它期望“n行受影响”消息匹配。 所以,我不能使用: 如果存在,以避免重复(不受行影响的消息) 注意:谨慎使用 不存在(更less行然后预期 过滤出微不足道的更新(例如,实际上没有数据发生变化) 做任何表访问之前(如日志logging) 隐藏复杂性或denormlisation 等等 在marc_s(谁知道他的SQL的东西)的问题说,不要使用它。 这与我认为的不同(我也认为我自己在SQL方面也有点胜任)。 有可能我错过了一些东西(随便指出一些明显的东西),但是你们有什么想法呢? 注意:我看到这个错误已经有好几年了,因为我现在不使用SQLDataAdapter。 评论和问题后编辑: 编辑:更多的想法… 我们有多个客户端:一个可以使用C#SQLDataAdaptor,另一个可以使用Java的nHibernate。 SET NOCOUNT ON可能会以不同的方式影响这些SET NOCOUNT ON 。 如果你把存储过程看作是方法,那么为了你自己的目的,假定某些内部处理以某种方式工作,这是坏forms(反模式)。 编辑2: 触发打破nHibernate问题 ,其中SET NOCOUNT ON不能设置 […]

检查SQL Server中是否存在表

我希望这是关于如何使用SQL语句检查SQL Server 2000/2005中是否存在表的最终讨论。 当你回答Google时,你会得到很多不同的答案。 有没有官方/向前兼容的方式来做到这一点? 这里有两种可能的方式来做到这一点。 哪一个是标准/最好的方法呢? 第一种方法: IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='mytablename') SELECT 1 AS res ELSE SELECT 0 AS res; 第二种方式: IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL SELECT 1 AS res ELSE SELECT 0 AS res; MySQL提供了简单的SHOW TABLES LIKE'%tablename%' ; 声明。 我正在寻找类似的东西。

你应该在SQL Server中selectMONEY还是DECIMAL(x,y)数据types?

我很好奇money数据types和decimal(19,4) (我相信这是钱在内部使用什么decimal(19,4)之间是否有真正的差别。 我知道money是特定于SQL Server的。 我想知道的是,如果有一个令人信服的理由,select一个在另一个之上; 大多数SQL Server示例(例如AdventureWorks数据库)使用money而不是decimal ,例如价格信息。 我应该继续使用钱数据types,还是有利于使用小数? 钱是less字符input,但这不是一个有效的理由:)

如何使用SQL Server级联删除?

我有2个表:T1和T2,他们是现有的数据表。 我们在T1和T2之间有一对多的关系。 如何删除T1中的logging时,如何更改表定义以在SQL Server中执行级联删除,同时还删除了T2中的所有关联logging。 他们之间存在着外来的约束。 我不想删除表或创build触发器来删除T2。 例如,当我删除一个员工时,所有的审核logging也应该消失。 T1 – 员工, Employee ID Name Status T2 – 性能评测, Employee ID – 2009 Review Employee ID – 2010 Review

你怎么能在数据库中表示inheritance?

我正在考虑如何在SQL Server数据库中表示一个复杂的结构。 考虑一个需要存储一系列对象的细节的应用程序,这些对象共享一些属性,但有许多其他属性不常见。 例如,商业保险一揽子计划可能包括同一保单logging中的责任,动机,财产和赔偿保障。 在C#中实现这一点是很简单的,因为您可以创build一个包含部分集合的策略,其中部分根据各种types的封面的需要而被inheritance。 但是,关系数据库似乎不容易这样做。 我可以看到有两个主要的select: 创build一个策略表,然后创build一个Sections表,其中包含所有必需的字段,用于所有可能的变化,其中大部分将是空的。 创build一个政策表和大量的科表,每种types的封面。 这两种替代方法看起来都不尽如人意,特别是因为有必要在所有部分中编写查询,这将涉及大量的联接或多次空值检查。 这种情况下的最佳做法是什么?

varchar和nvarchar有什么区别?

这只是nvarchar支持多字节字符? 如果是这样的话,除了存储问题之外,真的有什么意义可以使用varchars吗?