Questions tagged «t-sql»

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

1
将FLOAT与RAISERROR一起使用
我一直RAISERROR()在提供一些基本的单元测试功能(如此处所示),但是对于无法FLOATs在错误消息中使用感到沮丧。我知道我可以将float转换为字符串,但是我RAISERROR在每个单元测试中都在使用,我不想为每个测试添加另一行代码。(我的单元测试已经足够罗word了!)是否可以在参数列表中执行内联转换/转换RAISERROR?还是有解决这种缺陷的另一种方法? 更新: 所以最终我希望我能做的是: RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm) 不幸的是,RAISERROR通常不处理%f或浮点数。所以我必须这样做: DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40)) RAISERROR('Unit Test FAILED! %s', 11, 0, @str) ...分散在数十个单元测试中时,看起来就像一团糟。因此,我想将其归结为以下内容: RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40)) 但这使我得到了Incorrect syntax near 'CAST'信息。我不明白为什么这是违法的,但是确实如此。我可以在这里使用另一个“衬板”吗?
11 sql-server  t-sql 

2
将日期时间列转换为秒数
在我的SQL Server数据库中,有一datetime列。 创建代表long该datetime列值的新列的好方法是什么?在long将表示了若干秒。 我认为,如果可以将其转换为longs,则可以更轻松地按时间段进行分组查询,因为我可以将长整数除以固定数量。 该表是静态的,不会更新或删除数据。

2
如何使用TSQL动态更改数据库
我在尝试将SSMS的上下文动态更改为动态SQL中指定的数据库时遇到麻烦: EXEC sys.sp_executesql N'USE db1 ' ; 它成功执行,但是SSMS的数据库上下文未更改。 我已经尝试过对上面的内容做一些细微的修改,就像这样 DECLARE @sql NVARCHAR(100) DECLARE @db NVARCHAR(50) SET @db = N'db1' SET @sql = N'Use ' + @db EXEC sp_executesql @sql 再次,它成功执行,但是数据库没有更改。

3
SQL Server插入到-如何识别导致截断错误的列
我有一个存储过程,将650个字段插入表中。插入失败,出现截断错误。 很简单 INSERT INTO SELECT (a bunch of fields) FROM (a bunch of tables) 下面是错误消息: 消息8152,级别16,状态14,过程DSP_Procedure,行1075字符串或二进制数据将被截断。 有没有一种快速的方法可以确定导致截断错误的字段? 要插入到表中的select语句具有650个字段的事实使得很难查明哪个字段导致截断错误。 我在想我可以一次注释掉字段块,以便一次仅将SP插入100个字段,然后在不同的时间运行SP 6或7次,直到我至少可以缩小到100个字段的组将包含导致截断错误的字段。 或者,我在想,也许我只能SELECT INTO新建一个表,然后将表中的数据长度与要插入到SP中的目标表的数据长度进行比较,以查看哪个字段包含的字段长度超出预期的字段长度。 .. 我正在使用SQL Server 2014。 还有更简单的选择吗?

4
如何使用存储过程为日期范围内的每一天创建一行?
我想创建一个存储过程,该过程将在给定日期范围内的每一天在表中创建一行。存储过程接受两个输入-用户所需日期范围的开始日期和结束日期。 因此,假设我有一个像这样的表: SELECT Day, Currency FROM ConversionTable Day是DateTime,而Currency只是一个整数。 为了简单起见,我们总是希望对于每个插入的行,“货币”列为1。因此,如果有人输入“ 2017年3月5日”作为开始日期,并输入“ 2017年4月11日”作为结束日期,我希望创建以下行: 2017-03-05 00:00:00, 1 2017-03-06 00:00:00, 1 ... 2017-04-11 00:00:00, 1 对存储过程进行编码的最佳方法是什么?我在测试环境中使用SQL Server 2008 R2,但实际环境中使用SQL Server 2012,因此,如果2012年引入了新功能,可以简化此任务,则可以升级测试计算机。

5
DELETE语句与REFERENCE约束冲突
我正在尝试删除所有用户,但出现错误: Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_M02ArticlePersons_M06Persons". The conflict occurred in database "workdemo.no", table "dbo.M02ArticlePersons", column 'M06PersonId'. The statement has been terminated. 查询: DELETE FROM [workdemo.no].[dbo].[M06Persons] WHERE ID > '13' GO 似乎我需要使用,on delete cascade;但卡住了。
11 sql-server  t-sql 

1
仅选择超集
我有两个表(以及一个非聚集索引),可以使用以下命令创建: CREATE TABLE GroupTable ( GroupKey int NOT NULL PRIMARY KEY, RecordCount int NOT NULL, GroupScore float NOT NULL ); CREATE TABLE RecordTable ( RecordKey varchar(10) NOT NULL, GroupKey int NOT NULL, PRIMARY KEY(RecordKey, GroupKey) ); CREATE UNIQUE INDEX ixGroupRecord ON RecordTable(GroupKey, RecordKey); 从技术上讲,我的表略有不同,并且我要加入其他一些表,但这是适合我的情况的代理。 我想选择所有GroupKeys不是另一个子集的子集GroupKey。 对于给定的超集,我想获取其GroupScore所有子集(包括自身)的最大值。 在a GroupKey包含与RecordKeys另一个完全相同的情况下GroupKey(s),则仅GroupKeys会抓取其中一个(与哪个无关)。 任何GroupKey具有完全相同的RecordKeys另一个GroupKey(s)也会有相同的GroupScore。 不相关的GroupKeys也可以具有相同的分数。 …

4
根据另一列重置运行总计
我正在尝试计算运行总计。但是,当累积总和大于另一个列的值时,应该重置 create table #reset_runn_total ( id int identity(1,1), val int, reset_val int, grp int ) insert into #reset_runn_total values (1,10,1), (8,12,1),(6,14,1),(5,10,1),(6,13,1),(3,11,1),(9,8,1),(10,12,1) SELECT Row_number()OVER(partition BY grp ORDER BY id)AS rn,* INTO #test FROM #reset_runn_total 索引详细信息: CREATE UNIQUE CLUSTERED INDEX ix_load_reset_runn_total ON #test(rn, grp) 样本数据 +----+-----+-----------+-----+ | id | val | reset_val …

6
修剪空白(空格,制表符,换行符)
我正在使用SQL Server 2014,需要从列内容的开头和结尾清除空格,其中空格可以是简单的空格,制表符或换行符(\n和\r\n);例如 ' this content ' should become 'this content' ' \r\n \t\t\t this \r\n content \t \r\n ' should become 'this \r\n content' 等等。 我只能用 UPDATE table t SET t.column = LTRIM(RTRIM(t.column)) 但在其他情况下,则无效。

3
用空格替换列中的特殊字符
我正在尝试编写一个查询,以空格替换特殊字符。下面的代码有助于识别行。(字母数字字符,逗号和空格有效): SELECT columnA FROM tableA WHERE columnA like '%[^a-Z0-9, ]%' 如何将替换功能集成到select语句中,以便结果集中的所有字符(字母数字,逗号和空格除外)都被替换为''(空格)。这将不起作用: SELECT replace(columnA,'%[^a-Z0-9, ]%',' ') FROM tableA WHERE columnA like '%[^a-Z0-9, ]%'

4
SQL Server 2012的FIRST()和LAST()版本是什么?
我有一个带value栏的桌子。我要计算最后一行减去第一行,如下所示: id value 1 10 2 45 3 65 4 95 . . . . . . 500 200 我想获得 200 - 10 = 190 我试着然而,在SQL Server 2012中使用下面的命令,LAST并且FIRST不工作。 SELECT LAST(Value) - FIRST(Value) FROM Counter; SQL Server中此命令的语法是什么?

3
仅当过滤的部分位于JOIN而不是WHERE时才使用过滤的索引
我在下面创建了过滤索引,但是当我进一步向下运行2个查询时,该索引仅在JOIN中具有END_DTTM而不是where子句的第一个示例中用于查找(这是查询中的唯一区别) 。谁能解释为什么会这样? 索引创建 CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) 查询 DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = PATIENT_LIST_BESPOKE.LIST_ID AND PATIENT_LIST_BESPOKE.END_DTTM IS NULL WHERE PATIENT_LISTS.LIST_ID = @LIST_ID …

3
SQL Server:以小块的形式更新巨大表上的字段:如何获取进度/状态?
我们有一个非常大的表(一亿行),我们需要在表上更新几个字段。 对于日志传送等,显然,我们也希望将其保持在很小的规模上。 下面会解决问题吗? 以及如何获取它以打印一些输出,以便我们可以看到进度?(我们尝试在其中添加PRINT语句,但在while循环期间未输出任何内容) 代码是: DECLARE @CHUNK_SIZE int SET @CHUNK_SIZE = 10000 UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or deletedDate is null WHILE @@ROWCOUNT > 0 BEGIN UPDATE TOP(@CHUNK_SIZE) [huge-table] set deleted = 0, deletedDate = '2000-01-01' where deleted is null or …
10 sql-server  t-sql 

1
TSQL为什么使用变量可以使Top更快?
大家早, 我一直在研究一些中度复杂的sql,以从第三方产品数据库中“获取”某些数据,以将其显示在我们自己的内部应用程序中。 我添加了一个select来从子查询中的表中获取最高记录(如果那很有意义) 该查询花费了将近3分钟的时间,使用以下命令返回了100条记录的最终结果集 SELECT TOP 1 ... 我在网上查看了要实现的目标的改进,建议我将选择更改为使用变量,如下所示 DECLARE @topCount INT SET @topCount = 1 SELECT TOP (@topCount) ... 这将相同的查询从3分钟缩短到1秒,这太好了! 但是谁能解释为什么会这样。
10 sql-server  t-sql 

1
确保时态数据库设计中唯一条目的正确方法是什么?
我在设计时态数据库时遇到了麻烦。我需要知道如何确保商店的给定时间范围内只有一条活动记录。我已经读过这个答案,但是恐怕我无法围绕触发器的工作原理来解决。特别是,我将如何触发现有的触发器,以防止对记录进行更新,而是插入一条新记录。我的真正问题是,当完成日期为null时,我不知道如何防止商店拥有多个生效日期。(即防止2条活动记录的商店)。 这就是我所拥有的,但是它允许我为具有不同生效日期的商店插入新记录。 表定义: /****** Object: Table [PCR].[Z_STORE_TEAM] Script Date: 05/09/2014 13:05:57 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) DROP TABLE [Z_STORE_TEAM] GO IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Z_STORE_TEAM]') AND type in (N'U')) BEGIN CREATE TABLE [Z_STORE_TEAM]( [STORENUM] …

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.