我在 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
使用这样的表结构检索日期范围的最有效方法是什么?
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)
假设你想要既范围StartDate和EndDate。因此,换句话说,如果StartDate介于@StartDateBeginand之间@StartDateEnd,并且EndDate介于@EndDateBeginand之间@EndDateEnd,则执行某些操作。
我知道有几种方法可以解决这个问题,但最建议的是什么?
查询:
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 脚本,如果不满足某些条件,我需要停止继续该脚本。
当我谷歌它时,我发现 20 严重级别的 RaisError 将终止它。但由于某些原因,我不能使用该选项。
请向我提供停止 SQL 脚本执行的可能替代方法。
我有一个对数据库具有以下权限的 SQL 帐户:

db_executor您看到此帐户所属的角色是由以下脚本创建的:
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GRANT EXECUTE TO [db_executor]
GO
Run Code Online (Sandbox Code Playgroud)
当我运行一个select,update,insert或delete放在桌子上,它工作正常。当我尝试truncate桌子时,它给了我这个错误信息:
找不到对象“TableName”,因为它不存在或您没有权限。
此帐户缺少什么权限?
SQL Server 2012 上的“ALTER INDEX ALL REBUILD”操作失败,因为事务日志空间不足。索引从未重组或重建,因此几乎所有索引的碎片化率都超过 80%。
DB 使用简单的恢复模型。我假设在“ALL”形式的命令执行每个索引操作之后,事务日志数据将在下一次索引重建之前被刷新。这是它实际工作的方式,还是索引重建记录为好像它们是单个事务的一部分?
换句话说,我可以通过编写脚本来单独执行每个重建来减少事务日志的增长吗?还有其他因素需要考虑吗?
我有一个查询,它使用 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):
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
我有一个带有 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 字符串。
设想:
我们有两个表Tbl1&Tbl2在订阅服务器上。在Tbl1正在从出版商复制的Server A,它有两个触发器-插入和更新。触发器将数据插入和更新到Tbl2.
现在,我们必须清除(大约 9 亿条记录),Tbl2其中总共有 1000+ 万条记录。下面是一个月到一分钟的数据分布。
我在找什么;
在没有任何生产问题、数据一致性和可能没有停机时间的情况下清除该数据的最快方法。所以,我想按照以下步骤操作,但卡住了:(
脚步:
一旦 BCP-in 完成,使用 tsql 脚本插入新的增量数据。
挑战是 -如何处理增量“更新”语句? …
我正在研究 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,这并不好。这就是为什么我只想为当前会话禁用和启用触发器。是否可以?如果是,请告诉如何。
谢谢
sql-server ×10
encoding ×2
performance ×2
trigger ×2
archive ×1
collation ×1
datatypes ×1
index ×1
permissions ×1
t-sql ×1
truncate ×1
unicode ×1
update ×1