我正在尝试从 SQL Server 2008 R2 下的 SQL Server 代理作业中运行 (Windows) 批处理文件。在作业步骤中,我创建了一个新步骤,将其类型设置为“操作系统 (CmdExec)”。我最初尝试只将批处理文件名放在“命令”字段中。它给出了找不到文件的错误。
然后我尝试: cmd.exe c:\test.bat
这开始了,但永远不会完成(而且看起来它实际上并不工作)。
我尝试将批处理文件名用引号括起来:cmd.exe "C:\test.bat" 但这也没有任何区别。
让它发挥作用的神奇组合是什么?
SQL Server Express Edition(2005 和 2008)是否支持安装、启用和运行 CLR 存储过程和函数。
sql-server-2005 sql-server-2008 sql-server sql-server-express sql-clr
情况:开发人员工作站,通常只使用客户端工具连接到其他非本地 sql 服务器。但是,很少有使用完整版 sql server 进行本地开发的情况。为了不浪费一直运行 sql server 的系统资源,我想知道在仍然允许使用客户端工具(管理工作室等)的同时“关闭它”的最佳方法。
我正在考虑教育一个团队编写更好的 SQL Server 查询,并想知道人们对提高性能的最佳提示是什么。
例如,我曾经有一个 DBA,他坚持认为 count(*) 的性能会比 count(1) 差(我不知道她是否正确,或者它是否仍然适用于最新的查询优化器)。
我应该告诉团队尝试并始终使用或避免哪些简单的事情?理想情况下,我正在寻找 (a) 可能产生合理差异和 (b) 直截了当的事情,1 - 2 行说明。
我们有 3 个完全相同数据库的副本。所有 3 个数据库都有一个Users表,并且一个用户将始终存在于所有 3 个数据库中,并且具有完全相同的设置。任何时候我们想要添加或编辑用户,我们都必须更新 3 个数据库。
Users从数据库 2 和 3 中删除表并将其替换为Synonym指向数据库 1的表是否更好?
这是我能想到的优点/缺点:
优点
缺点
这是我正在考虑的一个选项,用于包含数据库之间相同设置的几个不同表,而不仅仅是Users表。我在示例中使用用户,因为它很容易理解。
我在存储过程中的插入有并发问题。该程序的相关部分是这样的:
select @_id = Id from table1 where othervalue = @_othervalue
IF( @_id IS NULL)
BEGIN
insert into table1 (othervalue) values (@_othervalue)
select @_id = Id from table1 where othervalue = @_othervalue
END
Run Code Online (Sandbox Code Playgroud)
当我们同时运行 3 个或 4 个这些存储过程时,我们有时会得到多个插入。
我打算像这样解决这个问题:
insert into table1 (othervalue)
select TOP(1) @_othervalue as othervalue from table1 WITH(UPDLOCK)
where NOT EXISTS ( select * from table1 where othervalue = @_othervalue )
select @_id = Id from table1 where othervalue = @_othervalue
Run Code Online (Sandbox Code Playgroud)
问题是,如何在sql server中并发插入而不重复?我必须使用 TOP 只插入一次的事实让我感到不安。
我有一个开发环境,它正在快速部署到生产环境中,并且在日志中注意到大约每 20 秒我就会看到一条消息:
Starting up database 'dbname'
CHECKDB for database 'dbname' finished without errors
Run Code Online (Sandbox Code Playgroud)
我注意到这一点是因为正在测试它的最终用户有一个问题,我将其与我在 Windows 事件日志(应用程序日志)中注意到的错误隔离开来:
The log for database 'dbname' is not available. Check event log for related messages.
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我没有发现相关消息,但通过离线/在线循环解决了。
我唯一能想到的是,这个应用程序每 1 毫秒收集一次数据,但所有这些数据都没有插入到数据库中。作为一个开发服务器,它被配置为日志和数据在同一个驱动器上。考虑到这两条信息,我倾向于这是一个 IO 问题,并且服务器正试图从与存储 (SAN) 的连接丢失中恢复。然而,即使这对我来说也没有意义,因为它并没有丢失所有 dbs,只是丢失了这个。还有什么可能导致这种情况?
平台:Windows Server 2008 R2 (Std.) 上的 SQL Server 2008 R2 (Ent.)
我在表上有一个 UPDATE 触发器,用于监视从一个特定值更改为任何其他值的特定列。发生这种情况时,它会通过单个 UPDATE 语句更新另一个表中的一些相关数据。
触发器所做的第一件事是检查是否有任何更新的行的该列的值与相关值发生了变化。它只是将 INSERTED 连接到 DELETED 并比较该列中的值。如果没有任何条件,它会提前退出,因此 UPDATE 语句不会运行。
IF NOT EXISTS (
SELECT TOP 1 i.CUSTNMBR
FROM INSERTED i
INNER JOIN DELETED d
ON i.CUSTNMBR = d.CUSTNMBR
WHERE d.CUSTCLAS = 'Misc'
AND i.CUSTCLAS != 'Misc'
)
RETURN
Run Code Online (Sandbox Code Playgroud)
在这种情况下,CUSTNMBR 是基础表的主键。如果我对此表进行大量更新(例如 5000 多行),即使我没有触及 CUSTCLAS 列,该语句也需要 AGES。我可以在 Profiler 中看到它在这个语句上停滞了几分钟。
执行计划很奇怪。它显示了具有 3,714 次执行和约 1,850 万行输出的插入扫描。它通过 CUSTCLAS 列上的过滤器运行。它将这个(通过嵌套循环)连接到一个删除扫描(也在 CUSTCLAS 上过滤),它只执行一次并且有 5000 个输出行。
我在这里做了什么愚蠢的事情来导致这种情况?请注意,触发器绝对必须正确处理多行更新。
编辑:
我也尝试过这样写(以防 EXISTS 做了一些不愉快的事情),但它仍然一样糟糕。
DECLARE @CUSTNMBR varchar(31)
SELECT TOP 1 @CUSTNMBR = i.CUSTNMBR
FROM INSERTED i
INNER …Run Code Online (Sandbox Code Playgroud) 我面临的问题是 sql server 2008 因某些高负载而失败。我需要找到那个负载情况并需要优化代码以便它可以处理负载。我在 Internet 上发现 SQL 分析器可用于跟踪数据库交互,稍后可以对其进行分析以找到问题发生的确切点。我还发现了如何启动 sql 分析器。但现在我的问题是,通过启动 sql profiler 我会影响服务器性能吗?
我正在尝试从 SQL Server 实例导出一个简单的维护计划。
我想检查导出到源代码管理,并将导出的维护计划应用于功能相同的实例。
StackOverflow和SQL Server Newbie建议使用 Integration Services 导出维护计划。
当我尝试连接到导出目标上的集成服务时,我收到以下错误:
连接到计算机“WEBSERVER”上的集成服务服务失败并出现以下错误:指定的服务不作为已安装的服务存在。
我们选择在 WEBSERVER 上禁用集成服务,因为我们仅使用此框为消费者应用程序提供数据。WEBSERVER 上的所有数据都是从后端实例复制的。Integration Services 大量用于处理后端实例上的数据。
是否有不使用集成服务导出维护计划的文档化方法?微软支持吗?