小编Jef*_*ood的帖子

为什么数字表“无价”?

我们的常驻数据库专家告诉我们,数字表非常宝贵。我不太明白为什么。这是一个数字表:

USE Model
GO

CREATE TABLE Numbers
(
    Number INT NOT NULL,
    CONSTRAINT PK_Numbers 
        PRIMARY KEY CLUSTERED (Number)
        WITH FILLFACTOR = 100
)

INSERT INTO Numbers
SELECT
    (a.Number * 256) + b.Number AS Number
FROM 
    (
        SELECT number
        FROM master..spt_values
        WHERE 
            type = 'P'
            AND number <= 255
    ) a (Number),
    (
        SELECT number
        FROM master..spt_values
        WHERE 
            type = 'P'
            AND number <= 255
    ) b (Number)
GO
Run Code Online (Sandbox Code Playgroud)

根据博客文章,给出的理由是

数字表真的是无价之宝。我一直使用它们来进行字符串操作、模拟窗口函数、用大量数据填充测试表、消除游标逻辑以及许多其他没有它们将非常困难的任务。

但我不明白这些用途到底是什么——你能提供一些引人注目的具体例子,说明“数字表”在 SQL Server 中为你节省了大量工作——以及为什么我们应该拥有它们?

sql-server

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

在专用数据库服务器上,要为操作系统保留多少内存?

假设您有一个明确用于数据库功能的专用服务器——您应该为操作系统保留多少内存?

我意识到这可能会有所不同,具体取决于特定的操作系统、特定的数据库软件等。但是,由于内存对数据库性能非常重要,我希望数据库具有最大合理级别的内存,而不会使主机操作系统挨饿。

所以

  • 什么是好的经验法则?
  • 我们应该查看哪些计数器或性能指标来确定我们是否走得太远并且主机操作系统是否以某种方式被数据库饿死?

sql-server windows memory

39
推荐指数
4
解决办法
7730
查看次数

设置 varchar(8000) 的后果是什么?

由于 varchar 占用的磁盘空间与字段的大小成正比,有什么理由我们不应该总是将 varchar 定义为最大值,例如varchar(8000)在 SQL Server 上?

在创建表上,如果我看到有人在做varchar(100)我应该告诉他们不你错了你应该做什么varchar(8000)

sql-server varchar

22
推荐指数
2
解决办法
3629
查看次数

如何将我的 SQL Azure 数据库复制到本地 SQL Server 实例?

我有一个托管在 SQL Azure 实例上的 OLTP 数据库。我想从云中提取数据库的副本,以便我可以对其运行一些大量提取和 OLAP 样式的查询,而不会影响源数据库。

如何将数据库的副本下拉到本地 SQL Server 实例?

backup duplication azure-sql-database

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

sp_send_mail 的数据库权限问题

我正在尝试发送数据库邮件,但我收到EXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.. 我正在运行的代码如下:

SELECT SUSER_NAME(), USER_NAME();
Create USER kyle_temp FOR LOGIN Foo
EXECUTE AS USER = 'kyle_temp';
SELECT SUSER_NAME(), USER_NAME();
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile',
            @recipients = 'test@test.com',
            @subject = 'Test',
              @body = 'Test'
REVERT;
DROP USER kyle_temp
Run Code Online (Sandbox Code Playgroud)

Foo Login 显示它映射到 msdb 中的 Foo 用户。当我查看 msdb 中的 foo 用户时,我看到它已检查“DatabaseMailUserRole”并在 dbo 上执行sp_send_dbmail

我错过了什么?

sql-server sql-server-2008-r2 database-mail

9
推荐指数
1
解决办法
4988
查看次数

需要分号来结束语句的 T-SQL 工具

我有什么可能是一个相当不寻常的问题。是否有一个T-SQL工具需要用分号来终止语句?我知道在SQL Server 2008 R1 中不需要使用分号,这是我要连接的,但实际上我想被迫使用它来运行更新查询。我相信我们都知道在 sql pad 中间编写如下查询的危险,然后突出显示它并运行它(不幸的是,这是我经常做的事情):

UPDATE dbo.Customers
SET ZipCode = '40223'
WHERE Name = 'Bob Loblaw'
Run Code Online (Sandbox Code Playgroud)

...因为您只需错选一次您的文本即可核对所有客户的邮政编码!

所以,理想情况下,我想继续在SQL Server Management Studio中完成我的大部分 sql 工作,但有一个单独的垫打开(在需要分号的工具中)并且只允许自己在那里编写数据操作查询。这会让我非常安心,因为我知道我永远不会错过选择我常用的更新查询。如果我这样做了,它就不会运行,因为它没有分号。

sql-server-2008

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