小编Rac*_*SQL的帖子

将“tbl”前缀添加到表名真的是个问题吗?

我正在观看一些 Brent Ozar 视频(例如这个视频),他建议不要在表格前加上‘tbl’‘TBL’

在网上我发现一些博客说它没有增加文档,而且“阅读它需要更长的时间”。

问题和考虑

  • 这真的有问题吗?因为自从我的第一份 dba 工作(高级 DBA 告诉我为组织这样做)以来,我就在表前加上了 'tbl' 前缀。
  • 这是我需要摆脱的东西吗?我做了一些测试,复制了一个非常大的表并给它加上了 'tbl' 前缀,同时保持另一个没有它,我没有注意到任何性能问题。

sql-server best-practices naming-convention

101
推荐指数
13
解决办法
3万
查看次数

为什么 SQL Server 在执行查询时会返回一些行,有时不会?

有一些查询,当我们点击“执行”时,它会显示一些行并不断增长,但查询还没有结束。但有时,它会等到查询结束。

为什么会发生这种情况?有没有办法控制这个?

sql-server ssms

34
推荐指数
2
解决办法
8310
查看次数

FOR XML 无法序列化数据,因为它包含字符 (0x0000)

我有一个很大的查询(如有必要,我会在此处发布)并且出现此错误:

消息 6841,级别 16,状态 1,第 1 行
FOR XML 无法序列化节点“NoName”的数据,因为它包含 XML 中不允许的字符 (0x0000)。要使用 FOR XML 检索此数据,请将其转换为 binary、varbinary 或 image 数据类型并使用 BINARY BASE64 指令。

我唯一使用的部分FOR XML在这里:

WHERE 
    (CodFuncionario = Results.CodFuncionario) 
FOR XML PATH(''), TYPE).value('(./text())[1]', 
    'VARCHAR(MAX)'), 1, 2, '') AS [Experiencia]
Run Code Online (Sandbox Code Playgroud)

但是,什么是node noname?以及如何查找此值:(0x0000)

这是子查询之一(我拥有 FOR XML 的唯一部分):

SELECT 
    [CodFuncionario],
    STUFF
    (
        (
            SELECT 
                ' / ' + 
            CAST
            (
                [DescFuncao] + '-' + 
                [DescTempoExperiencia] 
                AS VARCHAR(MAX)
            )...
FROM 
    [Linked_Server].db.dbo.tblFuncionarioExperiencia T0
INNER JOIN
    [Linked_Server].db.dbo.tblFuncao T1 On T0.codFuncao = …
Run Code Online (Sandbox Code Playgroud)

xml sql-server sql-server-2008-r2

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

使用 GUI 还原数据库 - 要还原的文件错误

我只是在摆弄 SSMS 图形界面并研究“恢复”任务的选项。

我注意到的一件事是,当我单击“生成脚本”时,查询的第一行是:

 RESTORE DATABASE [MyDatabase] FROM  DISK = N'Server_Patch\Database_name_LOGSHIPPING.BKP' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 5 ( and a lot of log backups for point in time )
Run Code Online (Sandbox Code Playgroud)

好的,没问题,但是,我每天都在备份这个数据库。这Database_name_LOGSHIPPING.BKP是我一个月前为日志传送制作的文件的名称。

为什么当我尝试使用 SSMS 图形界面恢复备份时,它指向这个备份文件?我什至没有这个文件了。


通过 MSSQLTIPS 的这个查询,我可以看到这个数据库的所有备份:

SELECT 
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server, 
msdb.dbo.backupset.database_name, 
msdb.dbo.backupset.backup_start_date, 
msdb.dbo.backupset.backup_finish_date, 
msdb.dbo.backupset.expiration_date, 
CASE msdb..backupset.type 
WHEN 'D' THEN 'Database' 
WHEN 'L' THEN 'Log' 
END AS backup_type, 
msdb.dbo.backupset.backup_size, 
msdb.dbo.backupmediafamily.logical_device_name, 
msdb.dbo.backupmediafamily.physical_device_name, 
msdb.dbo.backupset.name AS backupset_name, 
msdb.dbo.backupset.description 
FROM msdb.dbo.backupmediafamily 
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE …
Run Code Online (Sandbox Code Playgroud)

sql-server restore sql-server-2014

20
推荐指数
1
解决办法
1886
查看次数

如何向日期时间字符串添加 1 毫秒?

基于选择,我可以像这样返回 x 行:

1   2019-07-23 10:14:04.000
1   2019-07-23 10:14:11.000
2   2019-07-23 10:45:32.000
1   2019-07-23 10:45:33.000
Run Code Online (Sandbox Code Playgroud)

我们所有的毫秒都是 0。

有没有办法将 1 x 1 毫秒加起来,所以选择看起来像这样:

1   2019-07-23 10:14:04.001
1   2019-07-23 10:14:11.002
2   2019-07-23 10:45:32.003
1   2019-07-23 10:45:33.004
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个游标甚至一个没有成功的更新。

这是获得我想要的结果的查询:

  select top 10 ModifiedOn 
    from [SCHEMA].[dbo].[TABLE]
  where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Run Code Online (Sandbox Code Playgroud)

有 81k 个值。该字段是DATETIME

sql-server-2008 sql-server varchar datetime

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

错误:无法生成 SSPI 上下文

当有人尝试连接到 SQL Server 实例时,会显示错误:

不可能生成 SSPI 上下文。

昨天我们停电了(不知道这个用英语怎么说),我不得不关闭我们的服务器。

寻找答案,我发现了这个:

SQL Server 2008 连接问题:无法生成 SSPI 上下文

但这对我没有帮助,因为直到昨天它们都工作正常。我不想改变任何东西。但如果有必要,我会改变它。

Obs:我现在无法重新启动服务器。


编辑:自从我回答以来,我们没有任何错误。

sql-server-2008 authentication sql-server errors connectivity

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

在非常繁忙的表上创建索引

我们有一张桌子,insert\select每次都有很多(比如每秒有 100 台机器插入\更新)。

在不能被锁定的表上创建索引的最佳方法是什么?

如果我创建索引,我确定它会锁定请求,而我做不到。

这是一个有 100 万行+的大表。

index sql-server sql-server-2008-r2

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

谁创建了程序?(SQL Server 2008 R2)

有没有办法列出谁在 SQL Server 2008 中创建了某些采购?

这个 SO 链接中有一些答案,但来自 6 年前。

我知道最好的做法是写下您的姓名和日期,然后开始创建程序,但我在我工作的地方看不到这一点。

如果没有办法做到这一点,这个任务可以用触发器来完成吗?

还有一个奖励问题。这是 dba 的工作吗?知道是谁创造的吗?

非常感谢。

stored-procedures sql-server-2008-r2

10
推荐指数
1
解决办法
8673
查看次数

“喜欢或喜欢,或喜欢,或喜欢,或喜欢”的更好方法

在这个问题上,他和我有同样的问题。我需要类似的东西:

select * from blablabla 
where product 
like '%rock%' or
like '%paper%' or
like '%scisor%' or
like '%car%' or
like '%pasta%' 
Run Code Online (Sandbox Code Playgroud)

这是丑陋的,它没有使用索引。

据我了解,使用全文,我可以在一个字符串中选择多个单词。

这个问题也谈到全文

sql-server full-text-search sql-server-2008-r2

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

创建时更改数据库排序规则的触发器

我正在尝试创建一个触发器,以在创建时更改数据库的排序规则,但是如何捕获要在触发器内部使用的数据库名称?

USE master
GO
CREATE TRIGGER trg_DDL_ChangeCOllationDatabase
ON ALL SERVER
FOR CREATE_DATABASE
AS
declare @databasename varchar(200)
set @databasename =db_name()
    ALTER DATABASE @databasename COLLATE xxxxxxxxxxxxxxxxxxx
GO
Run Code Online (Sandbox Code Playgroud)

显然,这是行不通的。

trigger sql-server collation sql-server-2008-r2 ddl

9
推荐指数
2
解决办法
1445
查看次数