我在sql server 2016中有一个系统版本的表.我想在用户对表执行删除或更新操作时在其时态(历史)表中存储修饰符ID .
sql server 2016 有没有内置的解决方案呢?
时态表比变更数据捕获或变更跟踪有什么优势?
sql-server change-tracking change-data-capture sql-server-2016 temporal-tables
使用PostgreSQL我可以拥有多行json对象.
select (select ROW_TO_JSON(_) from (select c.name, c.age) as _) as jsonresult from employee as c
Run Code Online (Sandbox Code Playgroud)
这给了我这个结果:
{"age":65,"name":"NAME"}
{"age":21,"name":"SURNAME"}
Run Code Online (Sandbox Code Playgroud)
但是在SqlServer中,当我使用FOR JSON AUTO子句时,它为我提供了一个json对象数组,而不是多行.
select c.name, c.age from customer c FOR JSON AUTO
[{"age":65,"name":"NAME"},{"age":21,"name":"SURNAME"}]
Run Code Online (Sandbox Code Playgroud)
如何在SqlServer中获得相同的结果格式?
从 SQL Server 2016 开始,可以自动创建时态表。我想创建一个简单的查询来检索指定日期的数据。但是,当我尝试像这样在查询中指定日期时,它会出现语法错误:
SELECT * FROM Person FOR SYSTEM_TIME AS OF GETDATE()
Run Code Online (Sandbox Code Playgroud)
我什至尝试将数据类型转换为 datetime2,因为日期是这样存储的,但它仍然不起作用:
SELECT * FROM Person FOR SYSTEM_TIME AS OF CONVERT(datetime2,GETDATE())
Run Code Online (Sandbox Code Playgroud)
出现此问题,但是当我第一次执行SELECT GETDATE()然后复制文本并将其粘贴到查询中时,它工作正常。如何使用 AS OF 关键字指定日期时间?
提前致谢。
我有下表:
CREATE TABLE [dbo].[table1](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NULL,
CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
我正在学习SQL锁是如何工作的,我正在尝试测试一种情况,我想锁定一行不被读取和更新.从这篇文章开始,这个任务的一些灵感,这是我试图解决的原始问题.
当我运行这个T-SQL时:
BEGIN TRANSACTION
SELECT * FROM dbo.table1 WITH (UPDLOCK, HOLDLOCK)
WAITFOR DELAY '00:00:15'
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
我希望在表上放置一个独占锁,特别是对于行(如果我在主键上有一个WHERE语句)
但运行此查询,我可以看到GRANTed LOCK用于请求模式IX.
SELECT * FROM sys.dm_tran_locks WHERE resource_database_id = DB_ID() AND resource_associated_entity_id = OBJECT_ID(N'dbo.table1');
Run Code Online (Sandbox Code Playgroud)
此外,在单独的SSMS窗口中,我可以在事务运行时完全查询表.
为什么MSSQL不尊重锁定提示?
(SQL …
我有一个SQL Server 2016数据库,里面有几千条记录.
目前显示的记录是这样的;
我希望得到这个结果;
然后我将数据导出到Excel.
基本上有一个人和多个帐户类型的多个联系人详细信息,而不是每个细节占用一个新行,我需要将它们全部折叠到一行添加列,我可以创建一个新的数据库,如果插入了列,需要.
我试过这些解决方案的变化;
哈桑 - 我无法弄清楚我需要加入什么以及在哪里.
作者:Brad C - 我在这个数据库中截断了表格,因此取得了一些成功.
还有其他几个,但链接已被埋葬,我很抱歉.
架构
CREATE TABLE [dbo].[Contacts]
(
[emplid] [float] NULL,
[emcoid] [float] NULL,
[name] [varchar](50) NULL,
[conttp] [varchar](50) NULL,
[phone] [varchar](50) NULL,
[fax] [varchar](50) NULL,
[email] [varchar](50) NULL,
[auth] [float] NULL,
[ainits] [varchar](50) NULL,
[adate] [datetime] NULL,
[atime] [datetime] NULL,
[uinits] [varchar](50) NULL,
[udate] [datetime] NULL,
[utime] [datetime] NULL
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
测试数据
INSERT [dbo].[Contacts_NEW] ([emplid], [emcoid], [name], [conttp], [phone], [fax], [email], [auth], [ainits], …Run Code Online (Sandbox Code Playgroud) 我有一个如下所示的表格.我想要的是彼此连续的行被组合在一起 - 对于每个"ID".列IsContinued标记下一行是否应与当前行组合
我的数据如下:
+-----+--------+-------------+-----------+----------+
| ID | Period | IsContinued | StartDate | EndDate |
+-----+--------+-------------+-----------+----------+
| 123 | 1 | 1 | 20180101 | 20180404 |
+-----+--------+-------------+-----------+----------+
| 123 | 2 | 1 | 20180501 | 20180910 |
+-----+--------+-------------+-----------+----------+
| 123 | 3 | 0 | 20181001 | 20181201 |
+-----+--------+-------------+-----------+----------+
| 123 | 4 | 1 | 20190105 | 20190228 |
+-----+--------+-------------+-----------+----------+
| 123 | 5 | 0 | 20190401 | 20190430 |
+-----+--------+-------------+-----------+----------+
| 456 | …Run Code Online (Sandbox Code Playgroud) 我正在使用Sql Server 2016,我想将表转换为json.
我有一个简单的表:
CREATE TABLE [dbo].[TableTmp](
[Color] [nvarchar](50) NULL,
[Type] [nvarchar](50) NULL,
[Number] [nvarchar](50) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[TableTmp] ([Color], [Type], [Number]) VALUES (N'Blue', N'A', N'1')
GO
INSERT [dbo].[TableTmp] ([Color], [Type], [Number]) VALUES (N'Blue', N'A', N'2')
GO
INSERT [dbo].[TableTmp] ([Color], [Type], [Number]) VALUES (N'Blue', N'A', N'3')
GO
INSERT [dbo].[TableTmp] ([Color], [Type], [Number]) VALUES (N'Blue', N'B', N'1')
GO
INSERT [dbo].[TableTmp] ([Color], [Type], [Number]) VALUES (N'Blue', N'C', N'1')
GO
INSERT [dbo].[TableTmp] ([Color], [Type], [Number]) VALUES (N'Red', N'A', N'1')
GO …Run Code Online (Sandbox Code Playgroud) 在我的报表服务器数据库上,所有用户的报表订阅都保存为 SQL 代理作业,这是正常情况。
如果我连接到报表服务器数据库并列出 SQL 代理作业,我会看到一个以随机字符串命名的巨大作业列表,例如:
000D5787-8802-4CB1-9784-8897C596003F
通过反复试验的过程,我发现特定的代理作业与我的“每日销售”报告相关,并且我能够查看作业历史记录,将 SQL 命令添加到订阅运行的代码中,等等。
但是,我有数百份用户报告。我需要能够以某种方式将报告的名称与 SQL 代理作业的名称联系起来。要么让报表服务器更有效地命名其订阅作业,要么通过使用某种查找表,当我向下滚动作业列表时可以参考该表格。
有任何想法吗?我尝试查看 ReportServer 的“订阅”表,它确实有一些看起来相似的 ID 号,但它们都不与作业名称匹配。
我将 json 存储在 SQL Server 中的一列中,我需要修改它以从中删除方括号。格式如下。似乎找不到一个好的方法来做到这一点。
[ { "Message":"Info: this is some message here.", "Active":true } ]
Run Code Online (Sandbox Code Playgroud)
一种方法是使用下面的查询来完成此操作,但是这个查询非常非常慢,而且我需要在非常大的数据集上运行。
select a.value
from dbo.testjson e
cross apply OPENJSON(e.jsontext) as a
where isjson(e.jsontext) = 1
Run Code Online (Sandbox Code Playgroud)
我能想到的唯一其他方法就是进行字符串操作,但这可能很容易出错。有人可以帮忙解决这个问题吗?