小编Dot*_*per的帖子

DBCC SHRINKFILE 适用于 file_id 但不适用于逻辑名称

我正在尝试缩小数据库文件,但遇到了错误。

使用sys.database_files作品中的 file_id ,但使用逻辑文件名会产生错误。

两个语句中的逻辑文件名相同,所以这不是问题。此外,正在连接的数据库是相同的。以下按预期工作:

declare @fileId as int = (select file_id from sys.database_files where name = 'XY')
DBCC SHRINKFILE (@fileId, 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

然而以下...

DBCC SHRINKFILE ('XY' , 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)

...将导致错误 8985:

消息 8985,级别 16,状态 1,第 1 行
无法在 sys.database_files 中找到数据库“<我的数据库>”的文件“XY”。该文件要么不存在,要么已被删除。

sql-server-2008 sql-server shrink system-tables

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

将 FOR XML 结果存储在 xml 变量中(使用 WITH 语句)

我正在使用这样的 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-2008 xml

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

标签 统计

sql-server-2008 ×2

shrink ×1

sql-server ×1

system-tables ×1

xml ×1