小编Mar*_*ith的帖子

检测是否在数值中设置了位

我有一个表示一组标志的 tinyint 列。假设我想知道是否设置了特定位,我如何在存储过程中执行按位 AND/OR 操作?

sql-server stored-procedures syntax

6
推荐指数
1
解决办法
5360
查看次数

如何与 min(date) 分组并在同一个表中选择另一列

我有一个查询返回类似的内容:

Name   Gender Job         date of hire
John   M      mechanic    2012-05-08
John   M      electrician 2010-01-01
Vicky  F      scientific  2012-11-11
Bob    M      NULL        NULL
Run Code Online (Sandbox Code Playgroud)

我需要每个人的第一份工作的姓名、性别和工作名称。但我不知道怎么做。我的查询如下所示:

select name,gender,jobname,hiredate
from person p
left join job j on p.personid = j.personid
Run Code Online (Sandbox Code Playgroud)

我使用的是 Microsoft SQL Server 2000

我需要这个结果:

Name   Gender Job         
John   M      electrician
Vicky  F      scientific 
Bob    M      NULL       
Run Code Online (Sandbox Code Playgroud)

sql-server-2000 group-by greatest-n-per-group

6
推荐指数
1
解决办法
4万
查看次数

Blocking_session_id 怎么可能是负 2?

我有一个案例,我正在运行的查询需要很长时间。当我检查sys.dm_exec_requestsblocking_session_id是一个负值时,具体来说是-2。等待是一个LCK_M_X,阻塞的命令是一个DELETE语句。据我所知,目前没有其他东西触及那张桌子。事实上,唯一的活动请求是被阻止的连接和查询检查sys.dm_exec_requests。当我查看sys.dm_tran_session_transactions被阻止的会话时,只有一个出现。

sql-server-2008 sql-server blocking

6
推荐指数
1
解决办法
1068
查看次数

为什么是“INSERT INTO table;” 语法错误?

我有这个:

    CREATE TABLE people
    (
        id              bigserial,
        timestamp       timestamptz DEFAULT now() NOT NULL,
        PRIMARY KEY     (id)
    );

    CREATE TABLE "personal information"
    (
        id                  bigserial,
        "person id"         bigint NOT NULL,
        timestamp           timestamptz DEFAULT now() NOT NULL,
        "data's timestamp"  timestamptz,
        "field"             text NOT NULL,
        "value"             text,
        PRIMARY KEY         (id),
        FOREIGN KEY         ("person id") REFERENCES people (id) ON UPDATE CASCADE ON DELETE CASCADE
    );

    INSERT INTO people RETURNING id; -- Syntax error.
    INSERT INTO people; -- Syntax error.
    
Run Code Online (Sandbox Code Playgroud)

为什么我的插入失败?事实上,“people”表中的所有列都是自动的:该id列是一个 bigserial,并且该列timestamp …

postgresql syntax insert

6
推荐指数
2
解决办法
4743
查看次数

为什么 SQL Server 有时会估计加入空表会增加行数?

我最近遇到一个问题,tSQLt测试需要很长时间才能运行。

所测试的过程正在执行 38 个表 (!) 连接(具有 37 个伪造的表和一个表值参数)。

只有两个伪造的表和 TVP 插入了任何行

编译时间非常慢。

显示跟踪标志 8675

End of simplification, time: 0.002 net: 0.002 total: 0 net: 0.002
end exploration, tasks: 549 no total cost time: 0.013 net: 0.013 total: 0 net: 0.015
end search(0),  cost: 13372.9 tasks: 3517 time: 0.012 net: 0.012 total: 0 net: 0.028
end exploration, tasks: 3983 Cost = 13372.9 time: 0 net: 0 total: 0 net: 0.028
end search(1),  cost: 6706.79 tasks: 10187 time: 0.024 net: …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan tsqlt

6
推荐指数
1
解决办法
494
查看次数

计算多个表中值的实例

我正在尝试编写一个查询,该查询返回多个表中给定值的计数。

现在,我正在使用以下查询

SELECT COUNT(*) AS SL,
(
  SELECT COUNT(*)
  FROM [Sales Line Archive]
  WHERE [Document No_] = 123
) AS SLA
FROM [Sales Line]
WHERE [Document No_] = 123
Run Code Online (Sandbox Code Playgroud)

它返回一个结果,第一列是 Sales Line 中的行数,第二列是 Sales Line Archive 中的行数。

但是,我想使用IN子句请求多条记录,以便获得如下结果

Document No_, SL, SLA
1, 3, 0
2, 0, 4
3, 2, 1
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

5
推荐指数
1
解决办法
1170
查看次数

什么是 SQL Server 上下文中的非原子产量?

“非原子收益率”有一个 SQL Server 性能计数器。

该文件只是说明这是

每秒非原子产量的数量。

我很难找到非原子产率的解释。

什么是SQL Server 上下文中的非原子产量

sql-server

5
推荐指数
1
解决办法
500
查看次数

尽管定义了 RETURN VARCHAR(10),但用户定义的函数仅返回第一个字符?

每个人,

我无法弄清楚以下用户定义函数中缺少什么:

CREATE OR ALTER FUNCTION ufn_GetSalaryLevel(@Salary money)
RETURNS VARCHAR(10)
AS
BEGIN 
    IF (@Salary < 30000) RETURN 'Low';
    ELSE IF (@Salary <= 50000) RETURN 'Average';
    ELSE RETURN 'High';
    RETURN '';
END;

SELECT dbo.ufn_GetSalaryLevel(100440)
Run Code Online (Sandbox Code Playgroud)

输出仅包括“低”/“平均”/“高”返回值的第一个字符:

-----------------------------------------------------------------------
H

(1 row affected)
Run Code Online (Sandbox Code Playgroud)

为什么 MS SQL Server Management Studio 不考虑 VARCHAR(10)?

提前致谢!

Ps 请在下面找到我的输出 - 我不明白为什么它不能按预期工作?

在此处输入图片说明

ps2:该函数只有一个参数,我好像没有找到另一个同名的函数……下面可以找到与该函数相关的代码:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date, ,>
-- Description: <Description, ,>
-- =============================================
CREATE FUNCTION …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql functions sql-server-2019

5
推荐指数
1
解决办法
566
查看次数

计算区间表的集合差

我经常遇到以下问题。我有两张间隔表。它们受日期限制(没有时间部分)。每个表中的间隔不重叠。

开始时间 结束时间
2015-01-03 2015-03-02
2015-03-05 2015-04-01
开始时间 结束时间
2015-01-07 2015-02-27
2015-03-01 2015-03-13
2016-01-01 2016-01-02

我想找到两个表的集合差异,即代表第一个表中而不是第二个表中的时间的间隔。

上面的虚拟示例所需的输出:

开始时间 结束时间
2015-01-03 2015-01-06
2015-02-28 2015-02-28
2015-03-14 2015-04-01

即,如果第一个表的日期在下面用黄色标记,并且第二个表的范围用框包围,我将寻找未装箱的黄色日期的连续范围。

在此输入图像描述

我目前将两端都视为包含间隔,并使用 DateTime 作为时间戳。我当前的方法是通过三重自连接(恶心)获取第二个表的补集,然后通过连接将结果与第一个表相交。不好玩。

有更好的方法吗?

sql-server datetime interval sql-server-2019

5
推荐指数
1
解决办法
357
查看次数

安装 sp_WhoIsActive 时发生 CTE 错误

我有几个相同的(据我所知)SQL Server,我最近在其中添加了 sp_WhoIsActive(向一些人展示了我有多喜欢这个工具),但其中一个不允许我创建存储过程。我收到一个我非常熟悉的错误,该错误涉及 CTE 需要前面的语句以分号结尾。其他服务器均未收到此错误。

我将脚本归结为以下内容以重新创建问题:

SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET ANSI_WARNINGS ON;
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT ON;
GO

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_WhoIsActive')
    EXEC ('CREATE PROC dbo.sp_WhoIsActive AS SELECT ''stub version, to be replaced''')
GO

ALTER PROC dbo.sp_WhoIsActive
(
    @filter sysname = ''
)
AS
BEGIN;
    SET NOCOUNT ON;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    SET QUOTED_IDENTIFIER ON;
    SET ANSI_PADDING ON;
    SET CONCAT_NULL_YIELDS_NULL ON;
    SET ANSI_WARNINGS ON; …
Run Code Online (Sandbox Code Playgroud)

sql-server cte ssms sp-whoisactive

5
推荐指数
1
解决办法
394
查看次数