我有一个数据库,我试图通过运行此 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) 我有一个包含不同长度整数的 VARCHAR 列的数据库。我想对它们进行排序,所以 10 在 9 之后,而不是 1,并且 70A 在 70 之后。我可以使用WHERE 子句中的PATINDEX()、CTE 和 CASE 语句来做到这一点。
但是,我想知道是否有不需要的整理。
我有一个现有的数据库,其中包含 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)
所以它在内部构建,但没有部署。那可能吗?
我想强制重置 SQLCLR 使用的 AppDomain。除了重新启动 SQL Server 实例之外,我还能怎么做?
如果我在同一个文件夹中有 foo.sql 和 bar.sql,则 foo.sql 在 sqlcmd 模式下从 SSDT 运行时可以引用 bar.sql :r ".\bar.sql"。但是,SSMS 不会找到它。Procmon 显示 SSMS 正在寻找%systemroot%\syswow64:

如何告诉 SSMS 在不显式声明路径的情况下查看当前脚本保存到的文件夹?
我有一个Visual Studio 2013数据库项目这需要一个修改版本的FASTJSON作为参考。我在参考属性中选择了 Generate DDL,如下图所示:

在 .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 部署我的程序集?
如果我将 Microsoft SQL Server 数据库设置为脱机并删除它,它将被删除,但日志和数据文件将保留。如果我在联机模式下执行此操作,则另一个连接可能会阻止我删除它。在开发环境中,或者对于我想定期清理并在生产环境中重新创建的数据库,清理数据库及其数据文件和日志文件的最佳 T-SQL 命令序列是什么,它会一直工作因为我有 sa 权限并且没有人恶意阻止我删除数据库?
我有一个带有 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) 我有一个部署到 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 或其他存储机密的方法中覆盖和检索的虚拟项或默认值?
如果我想查询服务器上的所有数据库以查看是否存在存储过程,我可以组合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 ×7
ssdt ×3
sql-clr ×2
collation ×1
deployment ×1
index ×1
natural-sort ×1
powershell ×1
sorting ×1
sqlcmd ×1
ssms ×1
t-sql ×1