标签: sql-server-2008

如何向日期时间字符串添加 1 毫秒?

基于选择,我可以像这样返回 x 行:

1   2019-07-23 10:14:04.000
1   2019-07-23 10:14:11.000
2   2019-07-23 10:45:32.000
1   2019-07-23 10:45:33.000
Run Code Online (Sandbox Code Playgroud)

我们所有的毫秒都是 0。

有没有办法将 1 x 1 毫秒加起来,所以选择看起来像这样:

1   2019-07-23 10:14:04.001
1   2019-07-23 10:14:11.002
2   2019-07-23 10:45:32.003
1   2019-07-23 10:45:33.004
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个游标甚至一个没有成功的更新。

这是获得我想要的结果的查询:

  select top 10 ModifiedOn 
    from [SCHEMA].[dbo].[TABLE]
  where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Run Code Online (Sandbox Code Playgroud)

有 81k 个值。该字段是DATETIME

sql-server-2008 sql-server varchar datetime

15
推荐指数
3
解决办法
1万
查看次数

在 SQL 2008 上复制实例的最有效方法是什么?

我们有一个简单的数据库实例,数据库中有足够的数据来保持它的有用性,我们可以将它用于演示目的,我想把它的一个副本放在我的笔记本电脑上,这样我就可以在开发工作时使用它我不在办公室。(常规的dev数据库实例大约150GB,这个实例是3GB)

在我的笔记本电脑上重新创建实例的最可重复/可编写脚本的方法是什么?我确定我将不得不再次运行 SqlServer2008 的安装程序,并设置一个实例,但在那之后......我想我希望能够每个月左右删除我的旧数据库并且将所有新内容复制到我的笔记本电脑上,因为我的实例在一个演示系统或笔记本电脑上都不会更改。但是数据库本身会更新,刷新 sproc 等等。

我已经考虑编写所有“删除数据库文件;添加数据库文件{路径}”并将它们保存在某种可运行的批处理文件中,然后我可以“删除、删除、复制、添加”但想知道是否有是比 xcopy 和批处理更好的方法吗?

我试图以便宜的价格做这件事(我们不是总是尝试以便宜的价格做事),所以我对 RedGate 产品或类似产品并不特别感兴趣。我想要一些我可以在文本编辑器中为自己轻松维护的东西。

sql-server-2008 instance

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

SQL 代理 powershell 上下文参考

在我的新工作中,我们在每台服务器上都有多个命名实例。例如

  • 服务器 1\开发
  • Server1\DevIntegrated
  • 服务器 1\QA

我在工作中有一个 SQL PowerShell 脚本,它调用操作系统,调用Foo.exe但需要传递命令行参数(连接字符串)。每个实例上都将存在一个 SQL 代理作业,带有 PowerShell 类型的步骤,需要知道当前上下文是什么。此执行在 DevIntegrated 上开始。

我不想让每个脚本都以...开头

$thisInstance = "Dev"
Run Code Online (Sandbox Code Playgroud)

...特别是因为当我们在接下来的几个月中迁移到环境(新服务器和命名实例)时,我必须对其进行编辑。

如果我启动 SQLPS,我可以通过切片和切块 Get-Location 的结果或运行来确定我的实例

(Invoke-Sqlcmd -Query "SELECT @@servername AS ServerName" -SuppressProviderContextWarning).ServerName
Run Code Online (Sandbox Code Playgroud)

当 SQL 代理启动 PowerShell 类型的作业时,它会在 C:\windows\system32 中启动,并且Get-Location路由不起作用,因为它不在 SQLSERVER 上下文中。我可以切换到该上下文,但我将处于 SQL Server 的“根”,并且不知道我应该在哪个实例中。Invoke-Sqlcmd出于相同的原因,使用该路由也不起作用(从技术上讲,它在那里超时不是默认实例)

据我所知,我已经列举了我可以进入工作日志的所有基本“事情”,但似乎没有任何显示 SQLSERVER:\SQL\Server1\DevIntegrated

Get-Process似乎我可以使用它和一些尝试通过击中实例和匹配 spid 来拼凑东西的巫术,但这听起来像是来自地狱的血腥黑客。一定有一些基本的东西我错过了,有人能解释一下吗?

研究 PowerShell 的替代方案

我曾调查过使用其他工作类型,但没有得到令人满意的解决方案。研究表明,SQL 代理下列出的 PowerShell 是 SQLPS,通过右键单击代理启动它的实例会自动将我放到正确的位置。只有当我将交互式代码粘贴到作业步骤中时,我才知道前面提到的差异。

操作系统的作业类型使我处于相同的状态,因为我找不到确定哪个实例将我放入命令外壳的方法。当然,我可以使用 sqlcmd 并获取 的值,@@servername …

sql-server-2005 sql-server-2008 sql-server powershell

14
推荐指数
2
解决办法
2314
查看次数

SQL Server 语句在 SQL Server 2008 R2 上间歇性变慢

在我们的一位客户身上,我们的应用程序一直存在一些性能问题。它是一个 .NET 3.5 Web 应用程序,它使用和更新 SQL Server 数据库上的数据。目前我们的生产环境由一台 Windows 2008 R2 机器作为前端和一个 SQL Server 2008 R2 集群在后端组成。我们的应用程序使用 COM+ 和 MSDTC 连接到数据库。

正在发生的事情是这样的:我们的最终用户有时会抱怨应用程序运行缓慢。有些页面需要比预期更长的时间来加载。在试图弄清楚发生了什么时,我设法在数据库端发现了一些可能导致性能下降的奇怪行为。我注意到有时有一些 SQL 语句需要更多的时间来运行,这超出了预期。我设法使用探查器跟踪(使用 TSQL_Duration 模板)来识别长时间运行的查询,从而识别出其中的一些语句(主要是调用我们的一些应用程序的存储过程)。

问题是,当我直接在 SQL Management Studio 上的数据库上运行这些存储过程时,有时它们确实需要很长时间(大约 7/8 秒),有时它们很快(不到 1 秒)。我不知道为什么会发生这种情况,这让我抓狂,因为 SQL 机器(4 核,32 GB)没有被任何其他应用程序使用,并且这些查询不应该花这么长时间运行。

不是 DBA 或 SQL Server 专家,我一直在尝试查看一些可以帮助我理解问题的东西。以下是我为尝试解决问题而采取的步骤以及我迄今为止发现的内容:

  • 应用程序调用的所有 TSQL 代码都编写在存储过程中。
  • 我在 SQL Server Profiler 上发现了一些长时间运行的查询,但是当我在 Management Studio 上运行这些查询时,它们要么需要很长时间才能运行(从 4 秒到 10 秒),要么运行得很快(不到 1 秒)。我正在使用参数中传递的相同数据运行完全相同的查询。这些查询主要是带有选择语句的存储过程。
  • 我尝试查看等待和队列统计信息以尝试确定是否有进程在等待某些资源。我运行了以下查询:

WITH Waits AS
    (SELECT
        wait_type,
        wait_time_ms / 1000.0 AS WaitS,
        (wait_time_ms - signal_wait_time_ms) / 1000.0 AS ResourceS, …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2008

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

SQL Server 清单

继我的另一个问题之后,我想开始考虑每天/每周/每月应该在警报方面查看什么。我希望能够在问题发生之前看到问题(这就是计划)......

到目前为止,我已经开始收集以下脚本(无顺序):

日常的

  • 检查系统正常运行时间(以防万一我需要作为 DBA 检查任何内容)
  • 检查上次备份
  • 检查事务日志备份
  • 检查 SQL 作业的状态
  • 检查过去 24 小时(或 1140 分钟)的平均 CPU 使用率

每周

  • 检查 MSDB 备份历史记录
  • 检查上次运行 CheckDB 的时间
  • 检查索引碎片
  • 检查索引统计信息(读取与写入等)
  • 检查 IO 瓶颈

每月

  • 检查缺失的索引
  • 检查不再使用的索引

还有其他建议吗?(我是 DBA 的新手,所以任何帮助/建议总是受欢迎的)

sql-server-2005 sql-server-2008 maintenance

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

将 XML 数据存储在哪种数据类型中:VARCHAR(MAX) 或 XML

我正在使用 SQL Server 2008 为一组新资源定义架构...在这种情况下,每条记录(例如行)都需要存储 XML 片段。时; 虽然不经常;我需要查询 XML 以查找元素和属性值。如果留给我自己的设备,我会倾向于使用XML数据类型,尽管我一直认为这是有问题的。所以这让我想到了我的问题。

鉴于这种情况,在尝试决定将 XML 存储在XML列中还是varchar(MAX)列中时,我应该考虑哪些因素

如果有帮助……这里有一些额外的细节:

  • 尚未决定对这些片段(例如 XSD)使用模式
  • 碎片的大小从小到大不等
  • 所有 XML 都将是格式良好的
  • 在一天的过程中,将收集多达约 10,000 个片段,需要约 3 个月的在线查询支持
  • 对 XML 的查询将全天发生,但应该保持轻量级,很少有这种类型的并发查询

schema sql-server-2008 xml database-design datatypes

14
推荐指数
2
解决办法
1万
查看次数

为 SQL Server 2008 R2 设置分片以处理大型数据集的模式?

我想在 SQL Server 2008 R2 中处理一个大型数据集(> 10 亿行)。我听说如果你设置“分片”或“水平分区”,它可以更快地处理大型数据集,因为它将表分成多个文件。

您以前使用过分片或水平分区吗?如果是这样,根据您的经验,您能否提出与单个大型表相比取得更好结果的任何模式?

sql-server-2008 sql-server

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

从正在执行的作业中获取作业 ID 或作业名称

我有一个中央数据库,我将所有服务器上的作业结果写回。我通过 SQL 作业中的 powershell 将 3 个参数传递回中央服务器上的 sp 验证作业应该在当时运行等。然后通过 SSRS 公开信息,以便我们可以看到作业失败/长时间运行的作业/ & 尚未运行但应该运行的作业(或者如果有人搞砸了时间表)。

为此,我在每台服务器上的每个作业中添加了 2 个作业步骤,并且我想将脚本减少到每个作业中仅添加 1 个步骤……甚至可能从网络共享中调用它。

但我的问题是我传递的 3 个参数之一。我需要从正在执行的作业中获取正在执行的作业 ID 或作业名称,因此我不必对名称参数进行硬编码。我传递的 3 个参数是 jobid、status(success/fail)、errormsg。我编写的 powershell 脚本非常简单。

Invoke-sqlcmd -ServerInstance "MYRemoteSYSTEM" -Database remoteDB -Query "exec dbo.JOB_LOG 'JOBNAME/ID','Success/FAIL','BAD MESSAGE HERE'"

这将我需要的东西写到桌子上。我查看了 msdb.dbo.sp_help_job / msdb.dbo.sp_get_composite_job_info / dbo.xp_sqlagent_enum_jobs / 但这些都不能保证在有超过 1 个作业在执行的情况下我得到正确执行作业的 ID 或名称同时。

我什至尝试查看 sys.sysprocesses,但我认为由于代理作业是一个 powershell 脚本,它显示为“.Net SqlClient 数据提供程序”,因此我无法从显示为“SQLAgent - TSQL JobStep (Job 0xF1800243164745429C30474FFD5C990C : Step 1)”---这是我从Denny Cherry 的帖子中学到- 谢谢 Denny-

任何关于如何获取正在执行的 jobid 的想法将不胜感激。

谢谢,

克里斯

sql-server-2008 powershell sql-server-2008-r2

14
推荐指数
1
解决办法
7万
查看次数

在 SQL Server 中的表上有多个可为空的 FK 是否被认为是一种不好的做法

在我的 SQL Server 数据库结构中,我有 3 种类型的产品,它们需要有关订单的不同信息。因此,我创建了一张Customers表和三个不同的订单表:OrdersForProductAsOrdersForProductBsOrdersForProductCs。所有订单表在表上都有一对多的关系Customers

我还有另一张桌子,Payments里面有付款细节。但我在这里对如何构建它有疑问。

由于我有多种产品类型,并且客户可能同时订购多种产品,因此我需要将这三个订单表关联到Payments表。

另一个问题是客户可能只订购一种产品。因此,表上的 FK 列Payments需要为nullable.

我的问题是nullable,从长远来看,这些FK 专栏是否会让我头疼?一般来说,在表上拥有可为空的 FK 列是否被认为是一种不好的做法?

sql-server-2008 database-design sql-server sql-server-2008-r2

14
推荐指数
2
解决办法
4097
查看次数

什么是可视化 SQL 代理作业的好工具?

我发现用于管理代理作业的内置 MS SQL Studio 工具有点令人沮丧。您发现哪些工具有用?

顺便说一句,我想在这样的工具中看到三件事:

  • 哪些作业何时运行、持续多长时间以及它们是否成功的图形摘要。
  • 当前状态视图,如作业活动监视器,但近乎实时地刷新。
  • 用于复制或修改作业的更方便的界面(例如,比较两个作业步骤而不会被模态对话框阻止)。

编写一个小应用程序来处理这个问题可能很简单,但肯定有人已经这样做了,而且做得更好。

这显然是一个主观问题,所以如果某种 mod 徘徊过去,请随意将其设为 CW。

sql-server-2008 tools sql-server-agent

14
推荐指数
2
解决办法
1万
查看次数