标签: sql-server

是否有适用于 Linux 的 Microsoft SQL Server 2017 开发人员版?

我在 Ubuntu 上安装了 SQL Server 2016 Developer Edition,可免费用于开发目的:

SQL Server 2016 SP1 Developer 是一个功能齐全的免费版本,许可在非生产环境中用作开发和测试数据库。

我也想在 Ubuntu 上安装 SQL Server 2017。对于 Windows,在 SQL Server 下载页面上,有三个选项 - 试用评估、SQL Express(免费但有限)和 SQL Developer(对于非生产环境免费)。

但是,对于 Linux,只有在 Red Hat、Ubuntu 或 SUSE 上安装的链接。

在 Ubuntu 上安装时,SQL Server 2017 (v.Next) 说:

Enter the SQL Server system administrator password: 
Confirm the SQL Server system administrator password: 
Configuring SQL Server...

This is an evaluation version.  There are [174] days left in the evaluation period.
Run Code Online (Sandbox Code Playgroud)

是否有适用于 Linux 的 SQL Server 2017 …

sql-server ubuntu license sql-server-2017

8
推荐指数
2
解决办法
5208
查看次数

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
查看次数

SQL Server 是否使用多版本并发控制 (MVCC)?

阅读 IBM 网站HERE上发布的 CouchDB 的旧概述,我惊讶地发现以下内容:

大多数现代数据库已经开始从锁定机制转向 MVCC,包括 Oracle(自 V7 起)、MySQL(与 InnoDB 一起使用时)和 Microsoft® SQL Server 2005 及更高版本。

我目前使用 SQL Server 相当多(V2012)并且从未考虑过可能存在任何形式的 MVCC。我之前也在with (tablock, holdlock)存储过程中使用过。

SQL Server 是否真的在任何地方实现了 MVCC,它如何与是否实现的想法相协调with (tablock, holdlock)

sql-server mvcc

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

如何将 Windows SID 转换为 SQL Server server_user_sid?

有这个很好的 SQL Server 函数SUSER_SNAME可以将server_user_sid转换为用户名。这对于将众所周知的 Windows SID 转换为(可能已本地化的)用户名非常有用。

例子:

SELECT SUSER_SNAME(0x01020000000000052000000021020000)

-- yields 'BUILTIN\USERS' (or, on a German system, 'VORDEFINIERT\Benutzer')
Run Code Online (Sandbox Code Playgroud)

通过一些谷歌搜索和反复试验(=手动创建用户并sys.server_principals随后检查),我确定了以下等效项:

Built-in User/Group    Windows SID      SQL Server server_user_sid

BUILTIN\USERS          S-1-5-32-545     0x01020000000000052000000021020000
NT AUTHORITY\SYSTEM    S-1-5-18         0x010100000000000512000000
Run Code Online (Sandbox Code Playgroud)

将 Windows SID 转换为 SQL Server server_user_sids 的算法是什么?

sql-server windows users

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

为什么 GETUTCDATE 早于 SYSDATETIMEOFFSET?

或者,微软是如何让时间旅行成为可能的?

考虑这个代码:

DECLARE @Offset datetimeoffset = sysdatetimeoffset();
DECLARE @UTC datetime = getUTCdate();
DECLARE @UTCFromOffset datetime = CONVERT(datetime,SWITCHOFFSET(@Offset,0));
SELECT
    Offset = @Offset,
    UTC = @UTC,
    UTCFromOffset = @UTCFromOffset,
    TimeTravelPossible = CASE WHEN @UTC < @UTCFromOffset THEN 1 ELSE 0 END;
Run Code Online (Sandbox Code Playgroud)

@Offset设置在 之前 @UTC,但它有时具有较晚的值。(我已经在 SQL Server 2008 R2 和 SQL Server 2016 上尝试过这个。你必须运行几次才能捕捉到可疑的事件。)

这似乎不仅仅是四舍五入或缺乏精度的问题。(事实上​​,我认为舍入是偶尔“修复”问题的原因。)示例运行的值如下:

  • 抵消
    • 2017-06-07 12:01:58.8801139-05:00
  • 世界标准时间
    • 2017-06-07 17:01:58.877
  • UTC 偏移量:
    • 2017-06-07 17:01:58.880

因此日期时间精度允许 .880 作为有效值。

甚至Microsoft 的 GETUTCDATE 示例也显示 SYS* 值 …

sql-server datetime

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

如何识别 SQL Server 中的跨数据库查询

在准备迁移项目时,我们正在尝试识别任何跨数据库选择数据的查询。

这可以是以下形式:

SELECT fieldA, fieldB
FROM dbo.TableA a
JOIN DatabaseB.dbo.TableB b ON b.ID = a.ID
Run Code Online (Sandbox Code Playgroud)

或者

DECLARE @resultFromDatabaseB VARCHAR(50)

SELECT @resultFromDatabaseB = b.ID
FROM DatabaseB.dbo.TableB

SELECT fieldA, fieldB
FROM dbo.TableA a
WHERE a.ID = @resultFromDatabaseB
Run Code Online (Sandbox Code Playgroud)

或任何其他变体(包括插入/更新/等...)

不幸的是,大多数查询不是存储过程,因此我无法对 SQL 文本进行静态分析,我当前的计划要求记录缓存的查询文本并对它们进行静态分析。

这种方法有什么替代方法吗?即:使用扩展事件/跟踪/审计?

sql-server sql-server-2008-r2

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

如何查找在两次之间运行的作业

是否有查询来检查在给定时间之间运行的作业。我可以检查两次之间安排的作业,但我不想要那样。

示例 我想知道在16:00:00和之间运行的作业是什么17:00:00

在某些情况下,安排在的作业15:00:00可能会运行超过 1 小时,我也想要这些。我在谷歌搜索过,我得到的只是安排在两次之间的工作

sql-server jobs

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

SQL Server 2014 压缩和最大行大小

我需要创建包含大量小数 (26,8) 列的宽非规范化表(少于 1024 列限制,大多数列将为空或零)。我知道每行限制为 8060 字节,因此我尝试使用页面压缩创建表。下面的代码创建表,插入一行并查询行大小。行大小远低于限制,但如果我尝试向表中再添加一个小数 (26,8) 列,操作将失败并显示错误“创建或更改表 't1' 失败,因为最小行大小为 8074,包括 1256字节的内部开销。”。有没有办法创建具有这么多列的单个表?

drop table t1
GO
create table t1(c1 decimal(26, 8) null)
with (data_compression = page)
GO

declare @i int = 2;
declare @sql varchar(100);
while @i <= 486
begin
    set @sql = 'alter table t1 add c' + convert(varchar, @i) + ' decimal(26, 8) null';
    execute (@sql);
    set @i += 1;
end;
GO


insert into t1(c1) select 0
GO
declare @i int = 2;
declare @sql varchar(100);
while …
Run Code Online (Sandbox Code Playgroud)

sql-server database-internals compression sql-server-2014

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

尝试连接到 sql server 2008 时出现“必须信任计算机才能进行委派,并且当前用户帐户必须...”错误

我们的管理员使用 Visual Studio 2015 设置了一个全新的 Windows 2012 R2 服务器。当我尝试从 Visual Studio 连接到现有的 sql server 2008 数据库(在 Windows 2008 r2 服务器上运行)时,使用Tools-> Connect to database...,我可以输入所有信息,对话框检索数据库列表,Test Connection工作,但当我点击ok我得到:

必须信任计算机进行委派,并且必须将当前用户帐户配置为允许委派

两台服务器都在同一个域(开发)下,我是它们的本地管理员。我的帐户虽然位于可以访问开发域的不同域上。

有想法该怎么解决这个吗?他们是指消息中的 windows 2012 服务器还是数据库服务器?

顺便提一下,我可以使用相同的 Windows 帐户从另一个 Windows 2008 r2 服务器成功连接。

更新:失败的连接使用 Windows 身份验证。

sql-server-2008 sql-server windows-server

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

恢复 Sql Server 数据库的最快方法

在清理阶段,我们的 10000 个集成测试中的每一个都需要在每个集成测试完成之前将数据库恢复到其原始的“干净”状态。运行所有测试需要时间,80% 的时间花在数据库还原操作期间。

恢复操作只是从光盘中获取备份并恢复它。我现在想知道是否有办法优化这一点。我正在考虑的一种选择是将备份文件的位置从磁盘更改为内存。那可能吗?

另一种选择是仅拍摄表数据的快照,并仅将其保存为备份数据。我假设备份文件变得更小,因此恢复速度更快。那可能吗?

理想情况下,我希望避免恢复,而只是重置受影响的数据(每个测试产生的数据)。类似于:“恢复自测试开始以来修改过的任何表行”

我有哪些选择?我不是这方面的专家,但感觉我的问题应该有一个简单的解决方案。

sql-server backup restore

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