小编Jus*_*ing的帖子

为什么我的数据库在重建并重新索引所有内容后仍然碎片化?

我有一个数据库,我试图通过运行此 T-SQL 一次对所有表进行碎片整理:

SELECT 
        'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) +
        'ALTER INDEX all ON ' + name + ' REBUILD;'
    FROM sys.tables
Run Code Online (Sandbox Code Playgroud)

然后将输出复制并粘贴到新的查询窗口并运行它。我没有错误,但我仍然有碎片。我也尝试分别运行这两个命令,但仍然存在碎片。注意:REORGANIZE Aaron已经让我知道这是不必要的,并且我知道我可以使用动态 sql 来自动执行此操作。

我运行这个以确定我仍然有碎片:

SELECT * FROM 
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) 
WHERE avg_fragmentation_in_percent > 0
Run Code Online (Sandbox Code Playgroud)

我得到了:

database_id object_id   index_id    partition_number    index_type_desc alloc_unit_type_desc    index_depth index_level avg_fragmentation_in_percent    fragment_count  avg_fragment_size_in_pages  page_count  avg_page_space_used_in_percent  record_count    ghost_record_count  version_ghost_record_count  min_record_size_in_bytes    max_record_size_in_bytes    avg_record_size_in_bytes    forwarded_record_count  compressed_page_count
85  171147655   1   1   CLUSTERED INDEX IN_ROW_DATA 2 …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2008 fragmentation

43
推荐指数
3
解决办法
5万
查看次数

是否有排序规则按以下顺序 1,2,3,6,10,10A,10B,11 对以下字符串进行排序?

我有一个包含不同长度整数的 VARCHAR 列的数据库。我想对它们进行排序,所以 10 在 9 之后,而不是 1,并且 70A 在 70 之后。我可以使用WHERE 子句中的PATINDEX()、CTE 和 CASE 语句来做到这一点。

但是,我想知道是否有不需要的整理。

sql-server collation sorting natural-sort

12
推荐指数
3
解决办法
2900
查看次数

从 SSDT 部署中排除特定表

我有一个现有的数据库,其中包含 schema 中的所有内容dbo。我有一个 SSDT 项目,其中包含我使用架构添加到它的对象foo

我在项目中有一个看起来像这样的表:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

这取决于 dbo.a。dbo.a 有许多列是其他列的外键。其他人(维护默认架构的人)可能会更改 dbo.a。

我想简单地将 dbo.a 存储为:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)
Run Code Online (Sandbox Code Playgroud)

所以它在内部构建,但没有部署。那可能吗?

deployment ssdt

12
推荐指数
2
解决办法
7651
查看次数

除了重新启动 SQL Server,还有什么方法可以强制重置 SQLCLR AppDomain?

我想强制重置 SQLCLR 使用的 AppDomain。除了重新启动 SQL Server 实例之外,我还能怎么做?

sql-server sql-clr

11
推荐指数
2
解决办法
5120
查看次数

如何让 SSMS 像 SSDT 一样在 sqlcmd 模式下使用 :r 使用当前脚本的相对路径?

如果我在同一个文件夹中有 foo.sql 和 bar.sql,则 foo.sql 在 sqlcmd 模式下从 SSDT 运行时可以引用 bar.sql :r ".\bar.sql"。但是,SSMS 不会找到它。Procmon 显示 SSMS 正在寻找%systemroot%\syswow64

带注释的 Procmon 屏幕截图

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?

sql-server ssms sqlcmd ssdt

11
推荐指数
2
解决办法
5153
查看次数

sqlproj 中的引用程序集未部署到服务器

我有一个Visual Studio 2013数据库项目这需要一个修改版本FASTJSON作为参考。我在参考属性中选择了 Generate DDL,如下图所示:

fastJSON 属性面板

在 .sqlproj msbuild 文件中:

<Reference Include="fastJSON">
  <HintPath>..\..\fastjson\output\net40\fastJSON.dll</HintPath>
  <GenerateSqlClrDdl>True</GenerateSqlClrDdl>
</Reference>
Run Code Online (Sandbox Code Playgroud)

但是 bin/debug/Project.sql 不包含CREATE ASSEMBLY fastJSON . . .. 手动添加程序集工作,然后我的项目将部署和运行。我该怎么做才能让 Visual Studio 部署我的程序集?

sql-server sql-clr visual-studio-2013 database-projects

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

快速有效地删除数据库并删除所有文件的最佳方法?

如果我将 Microsoft SQL Server 数据库设置为脱机并删除它,它将被删除,但日志和数据文件将保留。如果我在联机模式下执行此操作,则另一个连接可能会阻止我删除它。在开发环境中,或者对于我想定期清理并在生产环境中重新创建的数据库,清理数据库及其数据文件和日志文件的最佳 T-SQL 命令序列是什么,它会一直工作因为我有 sa 权限并且没有人恶意阻止我删除数据库?

sql-server t-sql

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

Install-Module SqlServer 破坏现有模块是否正常?

我有一个带有 SSMS 17 的 Windows 10 盒子。我安装了 SSMS 2016,但现在已卸载。当我去安装 SqlServer 模块时,我收到此警告:

C:\WINDOWS\system32> install-module sqlserver -Scope AllUsers

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy
value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y
PackageManagement\Install-Package : The following commands are already available …
Run Code Online (Sandbox Code Playgroud)

sql-server powershell

8
推荐指数
1
解决办法
7246
查看次数

在 SSDT 项目中存储 CREATE EXTERNAL DATA SOURCE 而不暴露 DATABASE SCOPED CREDENTIAL 或 MASTER KEY 秘密;

我有一个部署到 Azure SQL DB 的 SSDT 项目。最近我添加了一个外部表。这需要一个外部数据源,如下所示:

CREATE EXTERNAL DATA SOURCE [data_warehouse]
    WITH (
    TYPE = RDBMS,
    LOCATION = N'mydb.database.windows.net',
    DATABASE_NAME = N'MainDW',
    CREDENTIAL = [dw_reader]
    );
Run Code Online (Sandbox Code Playgroud)

当我将它导入到我的 .sqlproj 中时,它抱怨凭证不存在,然后当我添加它时它抱怨主密钥不存在。问题是我不想将这些秘密存储在 SSDT 项目中。如何在 Azure Decops 中存储可以从 Azure Keyvault 或其他存储机密的方法中覆盖和检索的虚拟项或默认值?

azure-sql-database ssdt

8
推荐指数
1
解决办法
927
查看次数

我可以在没有动态 sql 的情况下使用一个查询查询所有数据库中的存储过程吗

如果我想查询服务器上的所有数据库以查看是否存在存储过程,我可以组合sp_executesql并在类似于以下的查询上运行游标:

SELECT 
     'select ' + '''' + name + '''' + ', name from [' + name 
   + '].sys.procedures WHERE name = ''usp_MyProc'' COLLATE SQL_Latin1_General_CP1_CI_AI ' 
FROM sys.databases 
-- I get a collation error from the following
WHERE name NOT IN ('ReportServer', 'ReportServerTempDb');
Run Code Online (Sandbox Code Playgroud)

我可以在没有动态 sql 和游标的情况下做同样的事情吗?

sql-server stored-procedures

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