标签: sql-server-2008

是否有用于 SQL-Server 的工具来帮助添加分号?

早期版本的 SQL-Server 不推荐使用分号来终止 sql 语句。

从 sql-server-2008 示例开始,现在 Microsoft 建议以分号结尾。

有一些格式化工具可以格式化 sql 查询并添加分号。我认为基本功能在 SMO 的某个地方。

唯一的问题是这些工具会删除所有注释。

任何想法如何保留所有评论以及如何添加所有推荐分号?

sql-server-2008 syntax

6
推荐指数
1
解决办法
249
查看次数

在 IP 故障转移的情况下将数据库放在哪里?

我知道要实现在线应用程序的某种程度的可用性,可以使用 IP 故障转移机制组织一个具有冗余的环境,并在多个相同服务器之间切换,以防其中任何一个出现问题。

但是数据库呢?数据库应该在每台服务器上,它们之间有某种复制数据,还是应该放在自己的专用服务器上?

SQL Server 2008 R2 或 SQL Server 2008 R2 Express 通常使用什么方法?

sql-server-2008 high-availability

6
推荐指数
1
解决办法
140
查看次数

查询链接到 SQL Server 2008 的 MySQL 服务器时出错

我在 MS SQL Server 2008 中创建了一个链接服务器到远程 MySQL 服务器。当我尝试查询任何表时,出现错误:

.表名。不包含可以选择的列,或者当前用户对该对象没有权限。

有谁知道为什么会这样?

更新:看起来这是 MSSQL SERVER 2008 的一个已知问题

http://support.microsoft.com/kb/971261

mysql sql-server-2008 database-link

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

最好使用 TSQL 或 C# 完成日期对齐和配对匹配提取吗?

首先:我的头衔很烂,所以帮我找出一个新的?

我不能在这里发布所有的 SQL(超过 30k 个字符),所以我把它贴在了pastebin.com

问题:

我得到一个 XML 文件,我从中抓取了一些记录,我需要从记录中提取一些数据并建立另一个表。这些记录是关于一个事件的发生和发生,我已经在 pastebin 中包含了示例数据以进行重新创建。没有看到数据,很难解释。我已经提供了从我的示例导入中获得的所有数据,这些数据应该足以构建应用程序,但我没有得到比数据中显示的更多的信息。

我会给你一点时间看一眼数据,所以这是有道理的。

所以我需要做的是:对于每个“关闭”事件,我需要将它与下一个“开启”事件相匹配,最后我需要有两张桌子,一张桌子用于“历史事件”,一张桌子为“时事”。但是,如果我能正确构建“历史事件”,我就可以弄清楚如何从中获取“当前事件”。

商业规则:

如果在“on”事件之前收集了两个或更多“off”事件,请保留最旧的“off”事件。如果在“关闭”事件之前收集了两个或更多“开启”事件,则保留最新的“开启”事件。如果有一个完整的对,把它们放在历史表中。如果有一个“关闭”事件而不是一个“开启”事件,把它放在当前表中(所以如果我想继续从这个表中插入/删除,那也很好)。如果当前表中已经存在“关闭”事件,我可以将其移动到历史表中以读取“开启”事件(这将需要稍后实施,但如果我可以匹配配对最初我现在可以继续前进。

我认为这就是逻辑。我的想法是弄清楚如何在 SQL 中执行此操作,或者将其推送到用 C# 编写的应用程序,并使用 C# 中的一些临时列表来执行此操作,并构建我需要用于...下一个逻辑的内容。这在 C# 中可能要容易得多,但我感觉 SQL 可以像 C# 一样轻松地完成这项工作,所以我需要 dba 大师的一些帮助。

我的查询已经不起作用,但这就是我在周五回家之前开始的地方,从那时起我一直在考虑它,并构建一个我可以在网上发布的示例问题(以及整个生活你也知道)。数据是实时数据且准确无误,除了 ID 被匿名化并且文本字段更改为易于使用的内容。

这是一个电子表格,大致显示了我希望数据在最后的样子以及现在的样子。有当前数据(为了清晰起见,每个ID之间有一个间隔行),历史表中的数据(与原始数据的ID对齐以便理解)和当前表(再次对齐)。我希望这可以帮助澄清业务规则。 https://spreadsheets.google.com/ccc?key=0AuvCdeHuVU5ddHRCNkpuWHBUREpRajlmLU5VX2xsWnc&hl=en&authkey=COq7y50H

所以完整的 SQL 包括 tabledefs 和当前(非常不正确的)查询在 pastebin http://pastebin.com/k2f2CLnQ

sql-server-2008 query

6
推荐指数
2
解决办法
885
查看次数

帮助解决集群问题:[sqsrvres] ODBC sqldriverconnect failed

我有一个 2 节点集群(NODE-A 和 NODE-B),它们之间分布着 2 个 SQL 实例。INST1 更喜欢 NODE-A,INST2 更喜欢 NODE-B。INST1 开始产生错误,然后故障转移到 NODE-B。在记录“恢复完成”后,将 INST1 迁移回节点 A 会生成连接错误。信息。

赢得 2008 R2 Ent。
SQL 2008 R2 Ent。

第一次失败后事件日志中的错误:

[sqsrvres] CheckQueryProcessorAlive: sqlexecdirect failed
[sqsrvres] printODBCError: sqlstate = HYT00; native error = 0; message = [Microsoft][SQL Server Native Client 10.0]Query timeout expired
[sqsrvres] OnlineThread: QP is not online.
[sqsrvres] printODBCError: sqlstate = 08S01; native error = 0; message = [Microsoft][SQL Server Native Client 10.0]The connection is no longer usable because the server …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 clustering

6
推荐指数
1
解决办法
6938
查看次数

SELECT * WHERE VarCharColumn IN (...) 优化

我有一个包含 3000 个字符串的列表,我将它们(一次 20 个)传递到参数化的 IN 子句中。它绝对没有得到我希望每次执行 500 毫秒的结果。

该列是一个索引。你知道比这更好的方法吗:

SELECT * FROM [ohb].[dbo].[MasterUrls] WITH (NOLOCK) WHERE Hash 
IN(@p0,@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19)
Run Code Online (Sandbox Code Playgroud)

3000 个列表需要 3 到 5 分钟。我真的需要把它缩短到大约 30 秒。这可能吗?

我在具有 24 gigs RAM 的服务器上使用 MSSQL 2008 R2,并在 6HDD (@15k/rpm) RAID 10 ISCSI 上运行双 8 核 NUMA Xeons @2.4Ghz。

该表有 140 万行,索引为非聚集索引。

执行计划将索引扫描显示为总执行的 90%。

index sql-server-2008 sql-server

6
推荐指数
2
解决办法
451
查看次数

扩展事件之外的非法 XML 字符

我正在捕获 SQL 服务器中的扩展事件。尝试分析跟踪 - 将事件数据转换为 xml 出现错误:

消息 9420,级别 16,状态 1,第 28 行
XML 解析:第 1 行,字符 731,非法 xml 字符

排查问题,发现sql_text action 值中有一个ascii 数字3 的字符。该值由客户端以动态 SQL 的形式传递。这在这里几乎不用担心。问题是 XE 无法处理 sql_text 中的奇怪字符。

这就是我获取导致问题的数据的方式:

declare @data nvarchar(max)
declare @id int
SET NOCOUNT ON

if object_id('tempdb.dbo.#xerrors') is null --drop table #xerrors
begin
    select CAST(null as XML) as xml_event_data, * 
    into #xerrors
    from sys.fn_xe_file_target_read_file
            (
                '...\Log\error_*.xet', 
                '...\Log\error_*.xem', 
                null, 
                null
            ) 

    alter table #xerrors
    add id int identity(1,1) primary key not null

end

while exists(select …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008

6
推荐指数
1
解决办法
3714
查看次数

我可以从纯 T-SQL 调用 SMO 吗?

我知道如何使用 PowerShell 和 SMO 编写存储过程脚本:

[System.reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo")  | out-null
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" 
$srv.databases['MyDatabase'].StoredProcedures['MyProc'].TextBody
Run Code Online (Sandbox Code Playgroud)

但由于我想在查询中使用过程文本,我想知道是否可以在纯 T-SQL 中以某种方式调用 SMO。

只能在开发环境中运行。

顺便说一句:返回具有给定名称的存储过程定义的函数可以解决我当前的问题,但不能回答我的问题。

编辑:

当我使用这个查询时,我想找到哪些过程引用了给定的表:

SELECT p.name --, definition 
FROM sys.sql_modules m
join sys.objects p on m.object_id = p.object_id
where p.type = 'P'
and definition like '%SearchForThis%'
Run Code Online (Sandbox Code Playgroud)

这与我想使用 SMO 获得的信息完全相同。

sql-server-2008 stored-procedures scripting sql-clr ole-automation

6
推荐指数
1
解决办法
1906
查看次数

运行单用户模式时无法登录到 SQL Server 2008

作为此处描述的过程的一部分,我正在按照此处的 MS 文档将登录名从 SQL Server 的一个实例迁移到另一个实例。这涉及将服务器置于单用户模式(我已经完成),然后运行脚本等。

但是,在单用户模式下(仅运行 SqlServer 服务)重新启动后,我无法使用我的 Windows 帐户或sa凭据登录。我收到错误:

Failed to connect to <servername>

Login failed for user 'sa'. Reason: Server is in single user mode. 
Only one administrator can connect at this time. (Microsoft SSQL Server, Error: 18461)
Run Code Online (Sandbox Code Playgroud)

正常重启服务器(即多用户模式)后,所有登录工作正常。

谁能解释发生了什么和/或如何纠正这个问题?

sql-server-2008 security

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

在数据序列中选择“边缘”记录

我有一个按日期顺序运行的项目表,每个条目都有开始和结束:

ID | Start            | End
----------------------------------------
1  | 2012-08-20 00:00 | 2012-08-20 23:59 
2  | 2012-08-21 00:00 | 2012-08-21 23:59 
3  | 2012-08-22 00:00 | 2012-08-22 23:59 
4  | 2012-08-23 00:00 | 2012-08-23 23:59 
5  | 2012-08-24 00:00 | 2012-08-24 23:59 
6  | 2012-08-28 00:00 | 2012-08-28 23:59 
7  | 2012-08-29 00:00 | 2012-08-29 23:59 
8  | 2012-08-30 00:00 | 2012-08-30 23:59
Run Code Online (Sandbox Code Playgroud)

请注意,数据中存在差距(周末和银行假期)。是否可以编写一个查询来选择间隙边缘的记录?我想要的是一种通用的方式来结束这样的事情:

ID | Start            | End
----------------------------------------
1  | 2012-08-20 09:00 | 2012-08-20 23:59 
2  | 2012-08-21 …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server-2008 t-sql gaps-and-islands

6
推荐指数
1
解决办法
321
查看次数