我正在使用此代码来混合日期和时间以将其用作唯一 ID
DateTime.Now.ToString("yyyyMMddHHmmssfffff")
Run Code Online (Sandbox Code Playgroud)
在 SQL Server 2017 中,我很困惑我可以使用哪种数据类型的最佳最小大小来存储此字符串。
最好的最小数据类型是什么:bigint,timestamp或varchar(19)?
如果将 Ola Hallengren 索引维护解决方案安装到已对多个索引应用了压缩的服务器上,脚本在重建相应索引时是否会遵守当前的压缩级别?
我目前正在 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吗?或者这是我需要通过返回错误消息的程序或如果我不提供该列数据的内容来执行的操作?
正如标题所述,我有一个递归 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 Management Studio 中按 F5 来运行多个 CREATE VIEW 命令和/或多个 GRANT SELECT 命令?如果是这样,我该怎么做?
我有一列包含数字:
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 2016),它有将近 6000 个 SP 并且没有命名约定……我必须识别所有返回数据的 SP,哪些是更新、插入或删除……很多 SP 很复杂,并且可以进行更新 /插入然后返回数据.... 有什么方法可以识别哪些sp返回数据哪些不返回(IE是纯插入/删除/更新)......。除了视觉上的眼球,每个都有一个快速的方法......
先感谢您。
有没有办法设置触发器,它会在创建新表后激活并获取新表名称?我能够提出下面的查询,但它只能按字母顺序获取第一个查询,而不是按创建日期
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) 我正在查看页面和范围分配的 SQL Server 2017 文档。
我从在线资源和 SQL 会议的会议中了解到:从 SQL Server 2016 开始,统一范围分配是默认行为。但是,MS文档描述的是:
为了提高空间分配效率,SQL Server 不会将整个区分配给具有少量数据的表。
- 统一范围由单个对象拥有;盘区中的所有八页只能由拥有对象使用。
- 混合区最多由八个对象共享。范围中的八个页面中的每一个都可以由不同的对象拥有。
新表或索引通常从混合区分配页。当表或索引增长到它有八页时,它就会切换到使用统一区进行后续分配
所以,我的问题是:在 SQL Server 2016 及更高版本中,如果我们创建新表或索引,最初会分配统一范围还是混合范围?
sql-server ×10
t-sql ×2
constraint ×1
datatypes ×1
profiler ×1
ssms ×1
table ×1
timestamp ×1
trigger ×1
view ×1