我正在使用这样的 SQL 查询创建 xml:首先是 CTE,然后SELECT是创建 XML的语句。
那个有效。但是,我想将输出存储在 XML 变量中(如果更容易,表变量也可以)。但我似乎无法让它工作(见第二个片段)。有什么建议?
有效的 XML 生成:
;WITH cte
AS (SELECT ...
)
SELECT ...
FOR XML PATH ('root')
Run Code Online (Sandbox Code Playgroud)
这是我尝试将它存储在表变量中,但我无法让它工作:
DECLARE @myXml TABLE(
x xml
);
;WITH cte
AS (SELECT ...
)
INSERT INTO @myXml SELECT ...
FOR XML PATH ('root')
Run Code Online (Sandbox Code Playgroud)
这是由此产生的错误消息:
Meldung 6819, Ebene 16, Status 1, Zeile 240
Die FOR XML-Klausel ist in einer INSERT-Anweisung nicht zulässig。
(我不能在插入语句中使用 FOR XML。)
我正在尝试配置对我的 SQL Server 命名实例(名为 SQL2012)的 TCP 访问。我使用管理工作室连接到数据库引擎。我输入服务器名称:“tcp:localhost\SQL2012”,然后收到此错误消息:
(提供者:SQL 网络接口,错误:26 - 错误定位服务器/指定的实例)
SQL Server 团队的这篇文章似乎非常有用,他们建议使用 PortQry 测试 SqlBrowser 服务。当我这样做时,我会得到以下信息:
Querying target system called:
localhost
Attempting to resolve name to IP address...
Name resolved to 127.0.0.1
querying...
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED
Sending SQL Server query to UDP port 1434...
Server's response:
ServerName MSWART7
InstanceName SQL2012
IsClustered No
Version 11.0.5058.0
tcp 52329
?K K P?K 5 - 2 1 qK 1 4 rK 8 7 0? 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写 T-SQL 脚本,它将:
A) 将数据库大小缩小到可能的最小大小;B) 进行完整性检查,彻底“重组”和优化数据库,使其处于“新鲜”状态。
这是我目前拥有的:
-- Check database integrity:
DBCC CHECKDB WITH NO_INFOMSGS;
GO
-- Get space usage information:
EXEC sp_spaceused @updateusage = N'TRUE';
GO
-- Shrink database:
DBCC SHRINKDATABASE (0, 0);
GO
-- Reindex all tables:
EXEC sp_msforeachtable N'PRINT ''Indexing table: ?''; DBCC DBREINDEX (''?'');'
GO
-- Update statistics for all tables:
EXEC sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'
GO
-- Clear procedure cache:
DBCC FREEPROCCACHE;
GO
-- Update all usage info in the database:
DBCC UPDATEUSAGE …Run Code Online (Sandbox Code Playgroud) 我删除了一个高可用性组,禁用了 sql 配置管理器中的选项并重新启动,我还从 Windows 中删除了故障转移群集组件并重新启动。
不幸的是,数据库在两台服务器上都被标记为恢复挂起。
我试图放弃它们,但得到了这个:
消息 3752,级别 16,状态 1,第 1 行
数据库“GEO”当前已加入可用性组。在删除数据库之前,您需要将其从可用性组中删除。
我也尝试恢复数据库但没有成功,并将其设置为紧急模式,但不能:
无法对数据库“GEO”执行该操作,因为它涉及数据库镜像会话或可用性组。不允许对参与数据库镜像会话或可用性组的数据库执行某些操作。
我什至试图通过停止引擎并重命名文件以尝试使其成为可疑文件来暴力破解服务器,但它仍在等待恢复中......我无法重新启用 HADR 设置,因为 Windows 集群已被破坏。
除了 sys.availability_replicas 之外,所有系统目录都是空的,它引用了另一台服务器(几年来我第一次希望回到过去可以访问系统表的美好时光)。
任何想法如何摆脱这些数据库?
我考虑安排每晚重新组织所有表的 SQL Server 作业。我们没有企业,所以我们不能在线重建(这意味着我们需要重组)。我们也不想在碎片化和空间维护上投入太多时间,因此我们正在寻求一种可以快速实施且未来不需要进一步时间投入的解决方案。
对恢复的生产备份的测试表明,在减少碎片和重新获得空间方面,重组几乎与重建一样好。
这是一个合理的想法吗?该方案是否会导致可用性或可维护性问题?这是一个合理的长期解决方案吗?
index sql-server maintenance sql-server-2008-r2 fragmentation
我有一个关于如何在运行查询的 SQL Server 2008 R2(标准版)中调试非常奇怪的行为(嵌套查询卡住)的问题。
有时(不幸的是并非总是如此)当我运行一个复杂的过程来执行一些数据转换时,涉及:
-- Update of statistics.
EXEC sp_updatestats;
-- Run of another procedure with single complex query
-- procedure declared with recompile.
EXEC usp_query_procedure;
Run Code Online (Sandbox Code Playgroud)
我遇到了这个过程没有完成的问题(典型的时间 < 1 秒,当卡住时,运行时间可能是几天,还没有完成)。
如果我取出查询文本并单独运行它,它会在一秒钟内完成,但如果我在程序中运行它,它就会卡住。
当这些症状开始我没有任何WITH RECOMPILE或sp_updatestats。我搜索了一下,发现可能会使用缓存的错误执行计划(对于某些输入参数),并且重新编译会有所帮助(前提是统计信息已更新)。虽然这两个选项似乎减轻了这个问题(它发生的频率较低),但它确实没有完全消失。为什么它在所有情况下都没有帮助?还有什么可能导致这个问题?
当该过程“卡住”并且我附加了一个 SQL Profiler 时,我可以看到每个刷新滴答声的数千个锁定 acuqires/释放。当查询正常运行时,只有一小部分已使用的锁,但这可能很明显。
同样非常奇怪的是,这种情况只发生在运行相同应用程序(标准版/企业版混合版)的四台服务器中的一台(标准版)上。
我该如何进一步调试?我应该登录探查器的哪些事件才能查看导致问题的原因?这里的其他人有没有发生过类似的事情?
请甚至暗示谷歌什么,寻找什么,追踪什么可以导致解决方案。如果我设法解决了这个问题,我一定会在这里发布我的发现以供后代使用。
鉴于以下 CREATE TABLE 语句:
CREATE TABLE [dbo].[Unit]
(
[id] SMALLINT NOT NULL IDENTITY(1,1),
[name] VARCHAR(100) NOT NULL,
CONSTRAINT [PK_Unit] PRIMARY KEY CLUSTERED ([id]),
CONSTRAINT [UQ_Unit_Name] UNIQUE ([name])
)
Run Code Online (Sandbox Code Playgroud)
如何在不违反 UNIQUE 约束的情况下允许以下两个字符串共存?
INSERT INTO dbo.Unit (Name) VALUES('e³m³/day')
INSERT INTO dbo.Unit (Name) VALUES('e3m3/day')
Run Code Online (Sandbox Code Playgroud)
任何见解表示赞赏。
编辑
当前整理是 Latin1_General_CI_AS
编辑
除非有人有更好的选择,否则我似乎必须使用 Latin1_General_BIN 并在我需要的几个地方手动处理 CI……如果没有提供更好的解决方案,我会将其转换为答案。
sql-server constraint sql-server-2008-r2 string unique-constraint
我正在尝试在两个 SQL Server 2008 R2 数据库之间设置事务复制,无论我尝试什么,它似乎都不起作用,而且我不知道去哪里寻找有关可能发生的事情的更多信息错误的。
我已经通过运行两台服务器上的向导创建了发布和订阅,并且一切似乎都已启动并正在运行 - 我在发布服务器上收到成功消息,表明它已创建发布并将文章添加到发布等。我也订阅订阅数据库成功订阅此发布。复制监视器显示一切正常 - 但即使我在发布数据库中手动添加/修改数据,发布和订阅的同步状态也始终显示为“没有可用的复制事务”。
我尝试从两台服务器中删除复制数据,从备份中删除和重新创建数据库,重新初始化订阅数据库等,但都没有任何乐趣。
任何有关在哪里寻找有关可能发生的事情的更多信息的建议将不胜感激。
TechNet 文章“优化链接到 SQL Server 的 Microsoft Office Access 应用程序”建议向从 MS Access 链接的 SQL Server 表添加rowversion列。从支持并发检查部分:
Office Access 会自动检测表何时包含此类列,并在影响该表的所有 UPDATE 和 DELETE 语句的 WHERE 子句中使用它。这比验证所有其他列仍然具有与上次刷新动态集时相同的值更有效。
好消息是每个 UPDATE/DELETE 语句和绑定表单都将从这个添加中受益,而无需在 MS Access 中进行任何更改(除了重新链接表)。
直到最近我才知道这个功能。我正在考虑向我从 MS Access 链接到的 SQL Server 中的每个表添加一个命名的rowversion列。 在我这样做之前,我应该注意哪些缺点?
显然会有存储要求和性能影响,但我认为这些可以忽略不计。此外,其中一些表是合并复制场景中的项目;这有什么区别吗?
ms-access sql-server concurrency alter-table merge-replication
我真的在寻找这个答案有一段时间了。我敢打赌这里有一个帖子,但是,我真的找不到(即使在 google 上)。
我认为这是一项简单的任务。
我想列出特定用户的所有数据库。
有没有办法做到这一点?
它可以是视图或游标。我就是想不出什么。
sql-server ×7
index ×2
maintenance ×2
alter-table ×1
concurrency ×1
connectivity ×1
constraint ×1
dbcc-checkdb ×1
hadr ×1
ms-access ×1
permissions ×1
profiler ×1
replication ×1
statistics ×1
string ×1
xml ×1