我正在观看一些 Brent Ozar 视频(例如这个视频),他建议不要在表格前加上‘tbl’或‘TBL’。
在网上我发现一些博客说它没有增加文档,而且“阅读它需要更长的时间”。
问题和考虑
有一些查询,当我们点击“执行”时,它会显示一些行并不断增长,但查询还没有结束。但有时,它会等到查询结束。
为什么会发生这种情况?有没有办法控制这个?
我有一个很大的查询(如有必要,我会在此处发布)并且出现此错误:
消息 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) 我只是在摆弄 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) 基于选择,我可以像这样返回 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 实例时,会显示错误:
不可能生成 SSPI 上下文。
昨天我们停电了(不知道这个用英语怎么说),我不得不关闭我们的服务器。
寻找答案,我发现了这个:
SQL Server 2008 连接问题:无法生成 SSPI 上下文
但这对我没有帮助,因为直到昨天它们都工作正常。我不想改变任何东西。但如果有必要,我会改变它。
Obs:我现在无法重新启动服务器。
编辑:自从我回答以来,我们没有任何错误。
sql-server-2008 authentication sql-server errors connectivity
我们有一张桌子,insert\select每次都有很多(比如每秒有 100 台机器插入\更新)。
在不能被锁定的表上创建索引的最佳方法是什么?
如果我创建索引,我确定它会锁定请求,而我做不到。
这是一个有 100 万行+的大表。
有没有办法列出谁在 SQL Server 2008 中创建了某些采购?
在这个 SO 链接中有一些答案,但来自 6 年前。
我知道最好的做法是写下您的姓名和日期,然后开始创建程序,但我在我工作的地方看不到这一点。
如果没有办法做到这一点,这个任务可以用触发器来完成吗?
还有一个奖励问题。这是 dba 的工作吗?知道是谁创造的吗?
非常感谢。
在这个问题上,他和我有同样的问题。我需要类似的东西:
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)
这是丑陋的,它没有使用索引。
据我了解,使用全文,我可以在一个字符串中选择多个单词。
我正在尝试创建一个触发器,以在创建时更改数据库的排序规则,但是如何捕获要在触发器内部使用的数据库名称?
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)
显然,这是行不通的。