标签: sql-server

19 位数字的最佳最小数据类型大小是多少?

我正在使用此代码来混合日期和时间以将其用作唯一 ID

DateTime.Now.ToString("yyyyMMddHHmmssfffff")
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 2017 中,我很困惑我可以使用哪种数据类型的最佳最小大小来存储此字符串。

最好的最小数据类型是什么:bigint,timestampvarchar(19)?

sql-server datatypes timestamp sql-server-2017

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

使用压缩索引的 Ola Hallengren 索引维护

如果将 Ola Hallengren 索引维护解决方案安装到已对多个索引应用了压缩的服务器上,脚本在重建相应索引时是否会遵守当前的压缩级别?

sql-server ola-hallengren index-maintenance

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

为列值创建条件规则

我目前正在 SQL Server 中处理下表

Table: order_status_logs
    log_id      INT NOT NULL IDENTITY(1,1)
    order_id    INT NOT NULL
    status_id   INT NOT NULL
    log_date    DATE NOT NULL
    expected_by DATE NULL
Run Code Online (Sandbox Code Playgroud)

在此status_id列的表中,可能有以下值:

[1] - Pending
[2] - Ordered
[3] - Backordered
[4] - Received
Run Code Online (Sandbox Code Playgroud)

我想设置我的表,以便在尝试创建新记录时,如果不等于 4 ,expected_by则从NULL到 。基本上除非已收到订单,否则该表将始终需要该列的数据。NOT NULLstatus_idexpected_by

可以用 a 来做到这一点CONSTRAINT吗?或者这是我需要通过返回错误消息的程序或如果我不提供该列数据的内容来执行的操作?

sql-server constraint

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

在 WHERE 子句中更改运算符时,简单的递归 CTE 会爆炸

正如标题所述,我有一个递归 CTE,当我更改 WHERE 子句中的运算符时,即使只有两行数据,它也会爆炸。

CREATE TABLE #Recursion
(Parent varchar(10), Child varchar(10), TopDate datetime)


INSERT INTO #Recursion (Parent, Child, TopDate)
VALUES
('00003137', '00003137', '2018-08-31'),
('04536347', '00003137', '2017-02-28'),
('05458040', '05458040', '9999-12-31'),
('00269705',' 05458040',' 9999-12-31')

;WITH 
Parent AS
  ( SELECT parent
     , child
     , 1 as sort
     , TopDate
 FROM #Recursion 
WHERE parent = child
 UNION ALL
   SELECT s.parent
        , d.child
        , d.sort + 1
        , s.TopDate
 FROM Parent as d
 JOIN #Recursion s
   ON s.child= d.parent
WHERE s.TopDate < d.TopDate
)

  SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql sql-server-2012

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

在一次执行中运行许多 CREATE VIEW 和 GRANT SELECT 语句

有没有办法通过在 SQL Server Management Studio 中按 F5 来运行多个 CREATE VIEW 命令和/或多个 GRANT SELECT 命令?如果是这样,我该怎么做?

sql-server ssms view

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

计算数字总和

我有一列包含数字:

Value
-----
123
452
021
111
...
Run Code Online (Sandbox Code Playgroud)

我想得到每个值的数字之和。

答案应该看起来像

Value  SumValue
-----  --------
123    6
452    11
021    3
111    3
...    ...  
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

我试过这个:

select value
     , case
           when len(value) = 2 then convert(int, left(value, 1))
                                  + convert(int, right(value, 1))
           when len(value) = 3 then convert(int, substring(convert(varchar(1), value), 1,1))
                                  + convert(int, substring(convert(varchar(1), value), 2,1))
                                  + convert(int, substring(convert(varchar(1), value), 3,1))
           else value
       end as SumNum
from get_number (000, 999);
Run Code Online (Sandbox Code Playgroud)

当我达到三位数时,它无法正确计算,在我看来必须有更好的解决方案。

sql-server t-sql

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

有没有办法识别哪个SP返回数据

我继承了一个数据库(SQL Server 2016),它有将近 6000 个 SP 并且没有命名约定……我必须识别所有返回数据的 SP,哪些是更新、插入或删除……很多 SP 很复杂,并且可以进行更新 /插入然后返回数据.... 有什么方法可以识别哪些sp返回数据哪些不返回(IE是纯插入/删除/更新)......。除了视觉上的眼球,每个都有一个快速的方法......

先感谢您。

sql-server

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

SQL Profiler 中的“排除不包含值的行”复选框有什么作用?

我想过滤跟踪并想知道“排除不包含值的行”复选框究竟有什么作用?是过滤掉任何事件类中没有选择的所有数据列吗?

谢谢。

在此处输入图片说明

sql-server profiler

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

使用变量 Select 和 Order by 触发

有没有办法设置触发器,它会在创建新表后激活并获取新表名称?我能够提出下面的查询,但它只能按字母顺序获取第一个查询,而不是按创建日期

CREATE TRIGGER CreateTable
ON DATABASE
    FOR CREATE_TABLE
AS
     DECLARE
       @table varchar(max);
     SELECT  top 1  @table =   [name] FROM sys.tables 
     insert into NewTable values(@table)
     ;
     end
Run Code Online (Sandbox Code Playgroud)

trigger sql-server table

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

SQL Server 2017 中的范围分配机制

我正在查看页面和范围分配的 SQL Server 2017 文档。

我从在线资源和 SQL 会议的会议中了解到:从 SQL Server 2016 开始,统一范围分配是默认行为。但是,MS文档描述的是:

为了提高空间分配效率,SQL Server 不会将整个区分配给具有少量数据的表。

  • 统一范围由单个对象拥有;盘区中的所有八页只能由拥有对象使用。
  • 混合区最多由八个对象共享。范围中的八个页面中的每一个都可以由不同的对象拥有。

新表或索引通常从混合区分配页。当表或索引增长到它有八页时,它就会切换到使用统一区进行后续分配

所以,我的问题是:在 SQL Server 2016 及更高版本中,如果我们创建新表或索引,最初会分配统一范围还是混合范围?

sql-server documentation database-internals

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