我们目前正在为我们的定制应用程序开发一个任务管理系统。经过深思熟虑,我们得出的结论是,我们只需要用户指定任务的截止日期。
我想知道当英国的用户添加任务并且圣彼得堡的用户看到它时它会如何工作,考虑到圣彼得堡比英国早至少 2 小时。
假设英国的用户创建了一个 20/Apr/2018 到期的任务。4 月 19 日 23:30(英国时间),圣彼得堡的一位用户打开了任务。但是,由于在圣彼得堡已经是 20/Apr,看起来任务已经完成,但实际上还没有安排运行。
如果日期字段实际上是 type date,我很确定圣彼得堡的用户会看到标记为过期的任务,因为他结束时已经是 20/Apr。
我见过其他几个任务工具,而且几乎所有工具都只允许任务的截止日期(而不是时间)。然而,我想知道其他系统如何处理此类问题,或者他们是否根本不打扰。
所以客观地回答我的问题:
datetime字段中捕获日期(即使我们不允许用户输入时间),然后还允许定义时区。我错过了什么吗?
编辑:为了回答有关我们是否希望任务的截止日期遵循查看任务的用户的时区或创建任务时的固定时区的问题,我们选择了固定时区。因此,任务将设置为英国时间 20/Apr 到期,只有在英国时间达到 YYYY-04-20 00:00:00.00 时才会到期。
为了支持这一点,我们将允许用户在创建任务时单击截止日期字段旁边的小图标,允许他们选择时区。时区将根据以下工作流程设置为默认值:
我们将为用户的帐户页面创建两个设置,允许用户:
a) 切换应用程序的选项以尝试从客户端自动获取其时区。
b) 让他们选择默认时区的选项。
基于这个要求,我们几乎可以得出结论,date数据类型是不可能的。现在对我来说不是 100% 清楚的是我们应该选择 a datetime2(我总是使用datetime2而不是datetime)还是 a datetimeoffset。
在我们的 SQL Server 实例之一(如果您确实需要知道,则为 12.0.5571.0)上,我们使用多个 IP 地址进行连接。
我一直在玩 puppet 并且一直在搞乱注册表设置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp
Run Code Online (Sandbox Code Playgroud)
看看我是否可以使用 puppet 来自动配置 IP 地址和端口分配。我创建了一个名为“IP172016000006”的新注册表路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP172016000006
Run Code Online (Sandbox Code Playgroud)
我从中模板化
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP1
Run Code Online (Sandbox Code Playgroud)
但是现在每当我启动 SQL Server 实例时,127.0.0.1 和 172.16.0.5 的动态端口都不同。
比如我会停止SQL Server的实例,进入
重新启动 SQL Server 后,该实例将侦听 127.0.0.1:43340 和 172.16.0.5:43341(似乎总是比另一个端口多 1) …
我试图将电子邮件列表旋转到一行上,但由于某种原因,我的主要电子邮件地址得到了自己的一行,所以我最终每个联系人有两行。
CREATE TABLE #tmp (
ID VARCHAR(20)
, EMAIL VARCHAR(50)
, isPrimary VARCHAR(1)
)
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'ABoyd@Energize.com', '1')
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'BSykes@Energize.com', '0')
INSERT INTO #tmp (ID, EMAIL, isPrimary) VALUES ('B4100358183Q!ZH.ETES', 'TC6@test.com', '0')
Run Code Online (Sandbox Code Playgroud)
我如何修改下面的脚本以仅返回包含所有 3 个电子邮件地址的一行而不是两行?
SELECT ID, [1], [2], [3]
FROM (
Select ID, EMAIL, isPrimary
, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY isPrimary desc) AS rn
from #tmp
) eml
PIVOT (
min(EMAIL)
FOR rn IN …Run Code Online (Sandbox Code Playgroud) 我正在使用 Tsql 脚本来恢复多个数据库。
RESTORE DATABASE XXX_M
FROM DISK = 'C:\XXX.bak'
WITH FILE = 1, replace
GO
Run Code Online (Sandbox Code Playgroud)
有时 .bak 文件已损坏(不是数据损坏)。
我想知道是否有一种方法可以检查文件是否未损坏,然后进行恢复,否则不会。我尝试在恢复验证后使用@@rowcount,但效果不好。
RESTORE VERIFYONLY
FROM DISK = 'C:\xxx.bak'
if @@ROWCOUNT !=0
print 'false'
else
print 'good'
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?
谢谢。
sql-server-2008 sql-server t-sql sql-server-2008-r2 sql-server-2014
我正在调查一个问题,即我们的第三方备份软件在工作日期间开始对我们的某些数据库进行完整备份的时间有些可预测。它启动日志备份,检测 LSN 中的断链,然后将其转换为完整备份。
我检查过,没有针对我们遇到的 SQL 服务器运行其他日志备份。
发生的情况是日志备份按计划开始,但有时在备份期间与备份服务器的连接丢失。该作业处于不确定状态,当它以相同的作业 ID 重新启动时,会检测到一条断开的链,并开始对受影响的数据库进行完整备份。
搜索日志,我可以看到备份失败和备份使用不再存在的相同 LSN 重新启动。
所以我的问题是,当使用 truncate 选项进行日志备份时,SQL Server 是在备份日志时还是在成功完成作业时截断日志?在我的情况下,似乎正在备份一系列 LSN,标记为已备份,当作业失败时,它会在作业重新启动时再次查找相同的 LSN。
我实际上有两个问题:
如果您设置一个带有加密列的表并将其复制到另一台服务器,另一台服务器是否必须具有相同的主密钥和对称密钥,还是自动复制?
复制活动记录在哪里?- 是在windows 事件查看器里面吗?
如果我的结果为空或空,我希望它不要在字符串前添加逗号。我怎样才能做到这一点?
Update Companies
set address4 = concat(address4,','+ t.Eircode)
From companies c
Inner Join Temptbl1 t
on c.comp_id = t.Comp_ID
OR address4 = ''
Run Code Online (Sandbox Code Playgroud)
更新 :
只是为了在我进行此更新时说清楚
,V05 TTX1
Waterford,X01 B234
,B90 E902
Co Wexford,TD2 PVE2
Run Code Online (Sandbox Code Playgroud)
不管它是否为空,它都会添加一个逗号
我想找回的是:
V05 TTX1
Waterford,X01 B234
B90 E902
Co Wexford,TD2 PVE2
Run Code Online (Sandbox Code Playgroud)
如果没有值,则只需添加不带逗号的字符串,在我们的例子中V05 TTX1不带,在字符串的开头
CREATE TABLE [dbo].[companies](
[comp_id] [int] NOT NULL,
[address4] [varchar](32) NOT NULL
)
INSERT INTO [dbo].[companies]
([comp_id]
,[address4])
Run Code Online (Sandbox Code Playgroud) 是否可以使用 T-SQL 编写数据库图表的创建脚本?
如果不是,当您使用数据库图表设计器保存/编辑图表时(它是使用 PowerShell 还是其他某种语言来保存和加载这些类型的对象),它在做什么?
我问是因为我希望自动创建数据库图表。我有一个我的开发人员编写的工具(在 C# 中),它根据它对我们供应商数据所做的一些 Web 服务调用的响应自动创建表及其外键关系。
我最近开发了一个存储过程,它基本上从几个不同的表中查询数据,对其进行操作,然后将结果插入到某个表中。
它最终成为一个包含许多子查询的 INSERT 语句,大约有 300 行。代码非常高效;但是,它的可读性不是很好,并且可能还有其他缺点。
编写这样的查询是否在推荐用法内:
SELECT ...
INTO #tempfoo
FROM foo;
SELECT ...
INTO #tempbar
FROM bar;
SELECT ...
FROM #tempfoo
INNER JOIN #tempbar ON #tempfoo.id = #tempbar.id;
Run Code Online (Sandbox Code Playgroud)
或者像这样写更好,即使它可能变得有些不可读:
SELECT ...
FROM
(
SELECT ...
FROM foo
) AS foo
INNER JOIN
(
SELECT ...
FROM bar
) AS bar ON foo.id = bar.id;
Run Code Online (Sandbox Code Playgroud)
注意:我知道这是一个简单的例子,但想象一下,如果您有嵌套子查询层和四个或更多表连接。
我们的 sql server 迁移被延迟(自然地),并且在新的切换日期之前它将用完空间。为了保持数据库正常运行,我需要给它另一个数据库文件来开始写入。
我已经分配了空间并准备好了,但是当我创建它时,SQL Server 会立即开始将数据移动到新文件中吗?
问题:我最好创建两个新文件,然后运行
dbcc shrinkfile (livendb, emptyfile)
Run Code Online (Sandbox Code Playgroud)
在旧的?确保他们立即变得平等?