下表是我的菜单主表,菜单深度不受限制。每个菜单可以有一个子菜单和一个子子菜单等等。
我面临的问题是获取具有相同顶级父级的所有项目。
一种解决方案是在父级不为空时进行循环,第二种解决方案是创建一个具有父级 id 的视图以及所有带有逗号分隔列的子菜单 id。
然后一个选择命令将给出父 ID。我的表如下:
CategoryID | ParentID
1 | null
2 | null
3 | 1
4 | 1
5 | 2
6 | 2
7 | 3
Run Code Online (Sandbox Code Playgroud)
输出应该是
CategoryID | AllRelatedCategory
1 | 1,3,4,7
2 | 2,5,6
Run Code Online (Sandbox Code Playgroud)
我当前的代码如下。问题是它仅适用于 3 个层次结构。
;with cte as
(
select a.CategoryID col1, convert(varchar, a.CategoryID) col2, a.ParentID
from [dbo].[TB_CATEGORY_MASTER] a where a.ParentID is null
union
select a.CategoryID col1, (convert(varchar, isnull(b.CategoryID,''))) col2, a.ParentID
from [dbo].[TB_CATEGORY_MASTER] a
left join [dbo].[TB_CATEGORY_MASTER] b on a.CategoryID=b.ParentID …Run Code Online (Sandbox Code Playgroud) 我有一个表,用于注册设备的状态。状态有开始时间和结束时间。但现在我想知道每个小时的状态是什么。如果从 15:20 到 17:10 的状态是“Operating”,我想看到它在一天的第 16 个小时运行 40 分钟,第 17 个小时运行 60 分钟,第 18 个小时运行 10 分钟当天。
这就是我现在所拥有的:
Shift_date 状态 Start_timestamp End_Timestamp ---------- --------- --------------- --------------- 5/20/2017 运营 5/20/2017 8:21 5/20/2017 10:40 5/21/2017 延迟 5/20/2017 10:40 5/20/2017 11:10 5/22/2017 运营 5/20/2017 11:10 5/20/2017 13:50
这就是我要的:
Shift_date 小时状态持续时间(分钟) ---------- ---- --------- ---------- 5/20/2017 1 .. .. 2017 年 5 月 20 日 ..... .. 5/20/2017 9 运营 39 5/20/2017 10 运营 60 5/20/2017 11 运营 40 5/20/2017 11 延迟 20 5/20/2017 …
我需要正确格式化一些欧洲地址。其中一个步骤是将第一个字母大写,但要避免一些特定的词,例如“on”、“on”、“von”、“van”、“di”、“in”、“sul”。因此,虽然我的技能稀缺,但我认为使用基于 RegEx 的函数是个好主意。
经过一番谷歌搜索后,我在这里找到了这个:
CREATE FUNCTION InitialCap
(
@String nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @Position INT;
SELECT
@String = STUFF(LOWER(@String),1,1,UPPER(LEFT(@String,1))) COLLATE Latin1_General_Bin,
@Position = PATINDEX('%[^A-Za-z][a-z]%',@String COLLATE Latin1_General_Bin);
WHILE @Position > 0
SELECT
@String = STUFF(@String,@Position,2,UPPER(SUBSTRING(@String,@Position,2))) COLLATE Latin1_General_Bin,
@Position = PATINDEX('%[^A-Za-z][a-z]%',@String COLLATE Latin1_General_Bin);
RETURN @String;
END
Run Code Online (Sandbox Code Playgroud)
这似乎是在寻找一个“非字母”+一个小写“字母”的序列
[^A-Za-z][a-z]
Run Code Online (Sandbox Code Playgroud)
好的,我想我已经了解它是如何工作的,并且我对其进行了修改以最好地满足我的需求。
我认为最好搜索一个空格或 ' 或 - 和一个小写字母,因此我将其更改为
[\s'-][\w]
Run Code Online (Sandbox Code Playgroud)
然后,经过多次尝试,我在 regexr.com 上构建了这个 RegEx,它似乎捕获了所需的序列:
[\s](?!di\s|in\s|sul\s|on\s|upon\s|von\s|uber\s|ueber\s)[\w]
Run Code Online (Sandbox Code Playgroud)
但是当我把它放到上面的函数中时,结果并不像预期的那样。
怎么了?
我和我的同事没有使用“远程桌面”连接到 SQL Server,而是使用 SQL Server Management Studio 将更改应用于远程服务器(每个用户都有自己的凭据)。
我们中的一个人对 SQL 表进行了一些更改,这使所有数据都处于危险之中。我很确定我们中的一个人是有罪的。我的问题是这个。我怎样才能证明这一点?是否有任何类型的查询来显示从客户端到远程 SQL Server 实例的所有过去的远程连接?也许有 IP 地址、计算机名称、凭据。
SQL Server Management Studio 是否有某种日志文件或任何查询来显示远程服务器登录?
PS 远程 SQL Server 实例上没有完整备份。日志很干净。
这是我们登录 SQL Server 的方式:

所有语法都是有效的 PostgreSQL 作为 UPSERT 的示例,它返回字段的旧值和新值。比方说,我有一个表foo用(1,A)...(5,E)。
CREATE TEMP TABLE foo
AS
SELECT id, chr(id+64)
FROM generate_series(1,5) AS t(id);
CREATE UNIQUE INDEX ON foo(id);
id | chr
----+-----
1 | A
2 | B
3 | C
4 | D
5 | E
(5 rows)
Run Code Online (Sandbox Code Playgroud)
现在,假设我想要 UPSERT 6 行。一些碰撞,一些新的行。
SELECT id, chr(id+74)
FROM generate_series(3,8) AS t(id);
id | chr
----+-----
3 | M
4 | N
5 | O
6 | P
7 | Q
8 | R …Run Code Online (Sandbox Code Playgroud) 我看过很多关于如何创建表值参数的教程 - 但是如何在创建表值参数后查看它?
我更喜欢在 SSMS 中使用 GUI 的方法,但 T-SQL 也足够了。
首先,我不是专业的 IT 人员。我从戴尔为我们的极小型企业购买了一台服务器。它附带已安装的 Windows Server 2012 R2 Essentials。请注意,我得到这台服务器的主要原因是我们使用的一个设计软件必须利用 SQL Server,以便所有工作站共享数据文件。软件公司来为我进行设置并说我们无法在域控制器上安装 SQL Server 2014(对于为什么我仍然有点不知所措)。
我的问题如下:
– 有没有办法格式化服务器并重新安装 WS 2012 R2 E 而不将其设置为域控制器,以便 SQL Server 2014 可以工作?
其他信息,如果它可能相关:
该服务器是新的,上面没有相关信息或数据,因此可以擦除它(假设这意味着在其上重新安装 WS)。
这是一款 AutoDesk 产品。
我们正在使用 Microvellum。
Postgres 10 带来了 SQL 标准GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY特性的实现,松散地称为标识列。这个特性取代了 Postgres 自己的SERIAL伪类型,消除了它的问题/问题。有关更多信息,请参阅此处和此处。
GENERATED…优于的主要原因之一SERIAL是序列号生成器在后台透明处理。我们可以添加列、调整当前序列号和删除列,所有这些都无需明确引用序列。
CREATE TABLE tbl (
col BIGINT
GENERATED ALWAYS AS IDENTITY
PRIMARY KEY ,
col2 text
)
;
Run Code Online (Sandbox Code Playgroud)
和…
ALTER TABLE tbl
ALTER COLUMN col
RESTART WITH 1000
;
Run Code Online (Sandbox Code Playgroud)
和…
ALTER TABLE tbl
ALTER COLUMN col
DROP IDENTITY IF EXISTS
;
Run Code Online (Sandbox Code Playgroud)
或者…
ALTER TABLE tbl
ALTER COLUMN col
DROP COLUMN IF EXISTS …Run Code Online (Sandbox Code Playgroud) 我有一个表格显示特定设备在给定时间戳的状态(0 - 损坏,1 - 实时):
device_owner device_id timestamp status
owner1 device_1 2001-01-01 09:00 0 -- leave this
owner1 device_1 2001-01-01 09:05 0 -- exclude
owner1 device_1 2001-01-01 09:10 0 -- exclude
owner1 device_2 2001-01-01 09:15 0 -- leave this
owner1 device_1 2001-01-01 09:30 1
owner1 device_2 2001-01-01 09:35 0 -- exclude
owner1 device_2 2001-01-01 09:45 1
owner1 device_1 2001-01-01 09:55 0 --leave this
owner1 device_1 2001-01-01 10:10 0 --exclude
owner1 device_1 2001-01-01 10:11 1
Run Code Online (Sandbox Code Playgroud)
等等。
我需要排除连续的零状态,并保留日期时间最早的状态。(这样我就可以定义设备损坏和活动之间的日期时间差异。)
结果:
device_owner device_id timestamp …Run Code Online (Sandbox Code Playgroud) 我有一个这样的表:
CREATE TABLE
dbo.DiscountBarcodeList
(
ID int NOT NULL IDENTITY
CONSTRAINT PK_DiscountBarcodeList
PRIMARY KEY CLUSTERED
, Discount int NOT NULL
CONSTRAINT FK_DiscountBarcodeList_Discount
FOREIGN KEY REFERENCES dbo.Discount (ID)
, CodeNumber int NOT NULL
, AssignedEntity int NULL
CONSTRAINT FK_DiscountBarcodeList_AssignedEntity
FOREIGN KEY REFERENCES dbo.Entity (ID)
ON DELETE SET NULL
, BarcodeID AS
CONVERT(
char(10)
, CAST(Discount AS binary(2)) + CAST(CodeNumber AS binary(3))
, 2)
, CONSTRAINT UQ_DiscountBarcodeList_DiscountCodeNumber
UNIQUE NONCLUSTERED
(
Discount ASC
, CodeNumber ASC
)
);
Run Code Online (Sandbox Code Playgroud)
该表将保存预先CodeNumber分配给 s 的 …
index sql-server sql-server-2014 unique-constraint computed-column
sql-server ×9
t-sql ×2
audit ×1
identity ×1
index ×1
insert ×1
installation ×1
logs ×1
postgresql ×1
regex ×1
update ×1
upsert ×1