Tag: tsql

如何以编程方式更改标识列值?

我有一个MS SQL 2005数据库与列ID Test表。 ID是一个标识列。 我在这个表中有行,所有的都有自己对应的ID自动增量值。 现在我想改变这个表中的每个ID,像这样: ID = ID + 1 但是当我这样做,我得到一个错误: Cannot update identity column 'ID'. 我试过这个: ALTER TABLE Test NOCHECK CONSTRAINT ALL set identity_insert ID ON 但是这并不能解决问题。 我需要为此列设置标识,但是我需要不时更改值。 所以我的问题是如何完成这个任务。

基于ID连接值

我有一个名为Results的表,数据如下所示: Response_ID Label 12147 It was not clear 12458 Did not Undersstand 12458 Was not resolved 12458 Did not communicate 12586 Spoke too fast 12587 Too slow 现在我想要输出每个ID显示一行,并从标签的值被连接和逗号分隔 我的输出应该如下所示: Response_ID Label 12147 It was not clear 12458 Did not Undersstand,Was not resolved,Did not communicate 12586 Spoke too fast 12587 Too Slow 我该如何做到这一点:

SQL Server是否提供类似于MySQL的重复键更新?

在MySQL中,如果指定ON DUPLICATE KEY UPDATE,并且插入的行会导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE。 例如,如果列a被声明为UNIQUE并且包含值1,则以下两个语句具有相同的效果: INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE table SET c=c+1 WHERE a=1; 我不相信我在T-SQL中遇到过类似的东西。 SQL Server是否提供了与MySQL的DUPLICATE KEY UPDATE相媲美的function?

T-SQL十进制除法精度

有谁知道为什么,使用SQLServer 2005 SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,9),12499999.9999) 给我11.74438969709659, 但是当我把分母的小数位数增加到15时,我得到的答案不太准确: SELECT CONVERT(DECIMAL(30,15),146804871.212533)/CONVERT(DECIMAL (38,15),12499999.9999) 给我11.74438969

从表中删除标识

我们有一个5GB的表(接近5亿行),我们要删除其中一列的标识属性,但是当我们试图通过SSMS来实现时,它会超时。 这可以通过T-SQL完成吗?

在INNER JOIN条件下有一个“OR”是一个坏主意?

在试图提高一个非常缓慢的查询速度(在两个表上只有大约50,000行的几分钟 ,如果它很重要的话,在SQL Server 2008上),我把问题缩小到我的内部连接中的OR ,如下所示: SELECT mt.ID, mt.ParentID, ot.MasterID FROM dbo.MainTable AS mt INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID OR ot.ID = mt.ParentID 我改变了这个(我希望的是)一个等效的左连接,如下所示: SELECT mt.ID, mt.ParentID, CASE WHEN ot1.MasterID IS NOT NULL THEN ot1.MasterID ELSE ot2.MasterID END AS MasterID FROM dbo.MainTable AS mt LEFT JOIN dbo.OtherTable AS ot1 ON ot1.ParentID = […]

用于在SQL Server中存储IP地址的数据types

我应该select哪种数据types来在SQL Server中存储IP地址? 通过select正确的数据types,是否容易过滤IP地址呢?

从SQL语句的字段中删除前导零

我正在从SQLServer数据库中读取一个SQL查询来生成一个提取文件。 从特定字段(简单的VARCHAR(10)字段)中删除前导零的要求之一。 所以,例如,如果该字段包含“00001A”,则SELECT语句需要将数据返回为“1A”。 在SQL中有一种方法可以轻松地删除这种方式的前导零? 我知道有一个RTRIMfunction,但这似乎只是删除空格。

T-SQLdynamic数据透视表

好吧,我有一张表,看起来像这样 ItemID | ColumnName | Value 1 | name | Peter 1 | phone | 12345678 1 | email | peter@host.com 2 | name | John 2 | phone | 87654321 2 | email | john@host.com 3 | name | Sarah 3 | phone | 55667788 3 | email | sarah@host.com 现在我需要把它变成这样: ItemID | name […]

在SQL Server中获取第一个星期几

我试图按星期将logging分组,将汇总的date存储为一周中的第一天。 然而,我用四舍五入的date标准技术似乎没有正常工作几个星期(尽pipe它有几天,几个月,几年,季度和我已经应用它的任何其他时间表)。 这里是SQL: select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), 0); 这将返回2011-08-22 00:00:00.000 ,这是一个星期一,而不是星期天。 select@@datefirst返回7 ,这是星期天的代码,所以服务器安装正确,据我所知。 我可以通过将上面的代码更改为: select "start_of_week" = dateadd(week, datediff(week, 0, getdate()), -1); 但是,我必须做出这样的例外,这让我有点不安。 此外,如果这是一个重复的问题,表示歉意。 我发现了一些相关的问题,但没有一个具体解决这个问题。