我在 MS SSMS 中有一个 400 行查询。当我运行它时,我得到:
消息 8115,级别 16,状态 2,第 1 行
将表达式转换为数据类型 int 时出现算术溢出错误。
第 1 行只是“Select”语句。我可以在 SSMS 中启用什么功能来让我更接近出现错误的行吗?
我想在我的应用程序的“SystemSettings”表中添加一条记录,并使用 UPDATE 中的值设置 PK 值。PK 值来自“TS_LASTIDS”表,其中包含此应用程序 (MicroFocus SBM) 中每个表的最大 PK 值。我需要增加该表中的“TS_LASTID”列,并在将新记录插入“SystemSettings”表时使用新值作为 PK。
Insert Into
ts_SystemSettings ( ts_Id, ts_Name, ts_LongValue)
Values (
( -- ******************** This subquery updates the PK in TS_LASTIDS and outputs the new value
Update
ts_LastIds
Set
ts_LastId=ts_LastId+1
Output
INSERTED.ts_LastId
Where
ts_Name = 'SystemSettings'
) , -- ********************
'NSLastChangeId' ,
1 ,
) ;
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚语法。这是 MS SQL Server 2012。
我需要提高 WHERE 子句中多个子查询的效率。上下文是现有产品的报告生成器。 我可以提供的唯一输入是 WHERE 子句。我有 3 个几乎相同的子查询,它们之间只有 1 个不同。我需要验证至少有 1 条记录符合每个条件。
这是查询的要点
Where
Exists (Select 1 From t1 ...etc... where ...etc... and fld1='X')
AND
Exists (Select 1 From t1 ...etc... where ...etc... and fld1='Y')
AND
Exists (Select 1 From t1 ...etc... where ...etc... and fld1='Z')
Run Code Online (Sandbox Code Playgroud)
3 个子查询中的每一个中的“选择”都是相同的。它确实加入并在它的 Where 子句中有其他字段,包括对来自外部查询的 PK 的引用:我只显示不同之处。
t1 中大约有 50 万条记录。上面的查询现在已经运行了 30 多分钟。我需要把它缩短到 30 秒。
我的选择非常有限——没有 DECLARE,没有临时表,没有“OVER”。