标签: sql-server

SQL Server 2005/2008 UTF-8 排序规则/字符集

我在 SQL Server 2005/2008 中找不到直接设置UTF-8相关的选项Collations/Charsets,与可以在其他 SQL 引擎中设置的选项相同,但在 SQL Server 2005/2008 中只有拉丁语和 SQL 排序规则。

是否有一些选项可以在 Win2008 操作系统上的 SQL Server 引擎(两个版本)2005/2008 中强制/安装这些排序规则/字符集

sql-server-2005 sql-server-2008 sql-server collation encoding

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

检索日期范围的最有效方法

使用这样的表结构检索日期范围的最有效方法是什么?

create table SomeDateTable
(
    id int identity(1, 1) not null,
    StartDate datetime not null,
    EndDate datetime not null
)
go
Run Code Online (Sandbox Code Playgroud)

假设你想要既范围StartDateEndDate。因此,换句话说,如果StartDate介于@StartDateBeginand之间@StartDateEnd,并且EndDate介于@EndDateBeginand之间@EndDateEnd,则执行某些操作。

我知道有几种方法可以解决这个问题,但最建议的是什么?

performance sql-server query-performance

18
推荐指数
2
解决办法
3万
查看次数

查找表的上次更新时间

查询:

SELECT 
    name AS TableName, 
    create_date AS CreatedDate, 
    modify_date as ModifyDate 
FROM sys.tables 
order by ModifyDate;
Run Code Online (Sandbox Code Playgroud)

...将告诉我上次创建和修改表的时间(从 DDL 的角度)。但我想知道上次从表中插入或删除实际数据的时间。是否可以在 SQL Server 中获得它?

sql-server-2008 sql-server

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

如何中断SQL脚本执行

我正在处理 sql 脚本,如果不满足某些条件,我需要停止继续该脚本。

当我谷歌它时,我发现 20 严重级别的 RaisError 将终止它。但由于某些原因,我不能使用该选项。

请向我提供停止 SQL 脚本执行的可能替代方法。

sql-server-2005 sql-server error-handling

18
推荐指数
3
解决办法
6万
查看次数

截断表需要哪些权限?

我有一个对数据库具有以下权限的 SQL 帐户:

在此处输入图片说明

db_executor您看到此帐户所属的角色是由以下脚本创建的:

CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO

GRANT EXECUTE TO [db_executor] 
GO
Run Code Online (Sandbox Code Playgroud)

当我运行一个selectupdateinsertdelete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:

找不到对象“TableName”,因为它不存在或您没有权限。

此帐户缺少什么权限?

sql-server permissions truncate sql-server-2012

18
推荐指数
2
解决办法
7万
查看次数

ALTER INDEX ALL REBUILD 是否比单独重建每个索引使用更多的事务日志空间和简单的恢复模型?

SQL Server 2012 上的“ALTER INDEX ALL REBUILD”操作失败,因为事务日志空间不足。索引从未重组或重建,因此几乎所有索引的碎片化率都超过 80%。

DB 使用简单的恢复模型。我假设在“ALL”形式的命令执行每个索引操作之后,事务日志数据将在下一次索引重建之前被刷新。这是它实际工作的方式,还是索引重建记录为好像它们是单个事务的一部分?

换句话说,我可以通过编写脚本来单独执行每个重建来减少事务日志的增长吗?还有其他因素需要考虑吗?

index sql-server

18
推荐指数
1
解决办法
2799
查看次数

'SELECT TOP' 性能问题

我有一个查询,它使用 select 运行得更快,top 100而不使用top 100. 返回的记录数为 0。你能解释一下查询计划的差异或分享解释这种差异的链接吗?

没有top文本的查询:

SELECT --TOP 100
*
FROM InventTrans
     JOIN
     InventDim
     ON InventDim.DATAAREAID = 'dat' AND 
        InventDim.INVENTDIMID = InventTrans.INVENTDIMID
WHERE InventTrans.DATAAREAID = 'dat' AND 
      InventTrans.ITEMID = '027743' AND 
      InventDim.INVENTLOCATIONID = '???? ?????' AND 
      InventDim.ECC_BUSINESSUNITID = '?????????';
Run Code Online (Sandbox Code Playgroud)

上面的查询计划(没有top):

https://pastebin.com/cbtJpxFf

在此处输入图片说明

IO 和 TIME 统计信息(没有top):

SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

 SQL Server Execution Times:
   CPU time = …
Run Code Online (Sandbox Code Playgroud)

performance sql-server t-sql query-performance performance-tuning

18
推荐指数
2
解决办法
4978
查看次数

为什么 varchar 数据类型允许 unicode 值?

我有一个带有 varchar 列的表。它允许使用商标 (™)、版权 (©) 和其他 Unicode 字符,如下所示。

Create table VarcharUnicodeCheck
(
col1 varchar(100)
)

insert into VarcharUnicodeCheck (col1) values ('MyCompany')
insert into VarcharUnicodeCheck (col1) values ('MyCompany™')
insert into VarcharUnicodeCheck (col1) values ('MyCompany?')
insert into VarcharUnicodeCheck (col1) values ('MyCompanyï')
insert into VarcharUnicodeCheck (col1) values ('MyCompany')

select * from VarcharUnicodeCheck
Run Code Online (Sandbox Code Playgroud)

但是varchar定义说,它允许非 unicode 字符串数据。但 Trademark(™) 和 Registered(®) 符号是Unicode字符。定义是否与 varchar 数据类型的属性相矛盾?我阅读了几个链接,例如第一个第二个。但是我仍然不明白为什么当定义说它只允许非 unicode 字符串值时它允许 unicode 字符串。

sql-server datatypes character-set encoding unicode

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

清除数据的最快方法是什么?

设想:

我们有两个表Tbl1&Tbl2在订阅服务器上。在Tbl1正在从出版商复制的Server A,它有两个触发器-插入和更新。触发器将数据插入和更新到Tbl2.

现在,我们必须清除(大约 9 亿条记录),Tbl2其中总共有 1000+ 万条记录。下面是一个月到一分钟的数据分布。

  • 一个月 - 14986826 行
  • 一天 - 483446 行
  • 一小时 - 20143 行
  • 一分钟 - 335 行

我在找什么;

在没有任何生产问题、数据一致性和可能没有停机时间的情况下清除该数据的最快方法。所以,我想按照以下步骤操作,但卡住了:(

脚步:

  1. BCP 从现有表 Tbl2 中取出所需的数据(大约 1 亿条记录,可能需要大约 30 分钟)。
    • 假设我在 1Fab2018 晚上 10:00 开始做活动,它在 1Fab2018 晚上 10:30 结束。到活动完成时,表 Tbl2 将获得成为 delta 的新记录
  2. 在数据库中创建一个名为 Tbl3 的新表
  3. 导出数据中的 BCP 到新创建的表 Tbl3(大约 1 亿条记录,可能需要大约 30 分钟)
  4. 停止复制作业
  5. 一旦 BCP-in 完成,使用 tsql 脚本插入新的增量数据。

  6. 挑战是 -如何处理增量“更新”语句? …

trigger sql-server archive

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

SQL Server:如何仅针对当前会话禁用更新触发器?

我正在研究 SQL Server 2008 R2。

我有一个表的好处,它有一个名为tiu_benefit的 AFTER INSERT, UPDATE 触发器。

我想为此表编写一个 UPDATE 语句来更新 1 行,但我不希望触发它的触发器。我知道我可以在 UPDATE 之前禁用触发器,然后在 UPDATE 之后启用触发器:

DISABLE TRIGGER tiu_benefit ON benefit;  
GO  
UPDATE benefit SET editor = 'srh' where benefit_id = 9876
GO
ENABLE TRIGGER tiu_benefit ON benefit;  
GO  
Run Code Online (Sandbox Code Playgroud)

但是这个禁用和启用触发器将影响当前登录的所有用户。因此,当我的脚本禁用触发器时,另一个用户有可能运行 UPDATE/INSERT,这并不好。这就是为什么我只想为当前会话禁用和启用触发器。是否可以?如果是,请告诉如何。

谢谢

trigger sql-server update

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