标签: sql-server-2008

为什么`1`不适合十进制(4, 4)列?

decimal(4, 4)在 MS SQL Server 2008 R2 中有一个列。如果我理解正确,这意味着:

  • Precision of 4,即小数点后最多可存储四位
  • Scale of 4,即一共可以存储四位数字

当我运行更新命令将列设置为1( update myTable set myDecimalColumn=1) 时,出现此错误:

将数字转换为数字数据类型时出现算术溢出错误。

我不明白这是怎么回事。 1小数点后没有数字,只有一位长。

sql-server-2008 decimal

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

我可以为表和存储过程赋予相同的名称吗?

是否可以将存储过程命名为与表相同的名称?我有一个名为“buyers”的现有表,我正在尝试创建一个名为“buyers”的存储过程,但出现此错误:

数据库中已经有一个名为“buyers”的对象。

sql-server-2008 stored-procedures

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

SQL Server:跟踪所有连接/断开连接

我有一个 Microsoft SQL Server 2008r2 SP1。

我需要知道哪些用户连接到数据库和断开连接。

理想情况下,我想要一个(日期时间、用户名、连接/断开连接)列表。

这可以使用扩展事件来完成吗?或者,还有更好的方法?

sql-server-2008 sql-server sql-server-2008-r2

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

可以使用 SQL Server 2008 中的视图返回地理数据类型 Lat/Long 属性吗?

希望这个问题是不言自明的。

我一直在寻找关于 sql server 2008 中的视图和地理数据类型的微软文档似乎很少/很差,我认为答案是“不,地理数据类型要么不受支持,要么在看法”; 但我不完全确定,我希望得到一些佐证。

我一直在尝试将地理数据添加到现有视图中。我的最终目标是从相关领域检索经度/纬度数据。

这是应用于表时有效但在视图中定义时无效的选择语句(简化):

SELECT     
    [dbo.vendor.location].Lat AS latitude,
FROM         
    dbo.vendor
Run Code Online (Sandbox Code Playgroud)

请注意,这[dbo.vendor.location]是字段,并且Latgeography数据类型的纬度属性。

当该 sql 在视图中运行时,将返回以下错误:

The multi-part identifier "dbo.vendor.location.Lat" could not be bound
Run Code Online (Sandbox Code Playgroud)

编辑:

请注意,我还尝试了以下查询,结果相似:

SELECT     
    [dbo].[vendor].[location].Lat AS latitude,
FROM         
    dbo.vendor
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SQL Management Studio 删除引号并返回相同的“多部分...无法绑定”错误。

sql-server-2008 sql-server sql-server-2008-r2 c# spatial

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

MAXDOP 是否会影响我应该创建的 tempdb 数据文件的数量?

根据我的阅读,配置 tempdb 的最佳实践包括创建多个数据文件。我理解的经验法则是,如果您应该创建与最多 8 个逻辑处理器相同数量的数据文件。然后,如果您有 tempdb 争用,请添加一个额外的文件,直到争用消失或您有每 4 个额外的逻辑处理器添加一个额外的文件。因此,如果您有 16 个逻辑处理器,那么您最多可以创建 10 个文件。

我很好奇的是 MAXDOP 是否会对此产生影响?因此,例如,如果我有 12 个逻辑处理器。我已将 MAXDOP 设置为 6,因为它们被分成 2 个 NUMA 节点。这是否意味着我应该为 tempdb 坚持使用 6 个数据文件?或者我是否仍然拥有推荐的处理器总数的 8 或 9?

sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012 tempdb

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

如何监控数据库服务器上的负载

有人可以建议我一种方法来监视我的数据库服务器上的负载吗?我应该每天监控哪些性能计数器,并确认服务器上的负载每天[或]每周[或]每个月都在增加。另外,建议我是否可以使用 DMV 来实现这一点,以便我们可以使用 SQL 代理作业将此信息存储在表中。因为作为一个 sql 人员,我会更乐意使用 TSQL 查询。

做这一切对我有帮助,向管理层提出我的论点,即该服务器可以根据数据处理这么多负载,如果服务器上的负载增加,我们可能需要更多资源(例如 CPU、更好的存储,更多 RAM 等...)或转移到具有更多功能的新服务器。

另外,请建议任何负载测试工具,以便我可以在测试环境中进行测试。

performance sql-server-2008 sql-server tuning

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

使用 Case 语句检查约束

如果列的输入值大于 3,我想在列上添加一个检查约束,而不应将其保存为 1 个其他输入值。对于这种情况,我使用下面的查询,但在插入数据时显示错误消息。

create table tblTestCheckConstraint 
(
id int,
NewColumn int
)


alter table tblTestCheckConstraint
add constraint chk_tblTestCheckConstraint_NewColumn1 CHECK  
(
    CASE
        WHEN NewColumn >4 THEN 1
        ELSE NewColumn
    END = 1
)
Run Code Online (Sandbox Code Playgroud)

插入语句:

insert into tblTestCheckConstraint values ( 1,5)
insert into tblTestCheckConstraint values ( 1,2)
Run Code Online (Sandbox Code Playgroud)

错误信息:

Msg 547, Level 16, State 0, Line 1
The INSERT statement conflicted with the CHECK constraint "chk_tblTestCheckConstraint_NewColumn1". The conflict occurred in database "DBName"
, table "dbo.tblTestCheckConstraint", column 'NewColumn'.
The statement has been terminated.
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server check-constraints

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

查看触发器触发的顺序

我们有 2 个 SQL Server 2008 环境,其中包含一些针对包含业务逻辑的表的触发器

在 2 个环境中,我们可以看到触发器以不同的顺序触发(感谢触发器中的打印语句)

如何查看每个环境中的触发器触发顺序?我知道我可以sp_settriggerorder用来设置它们,但我们想看看这两种环境有什么区别

sql-server-2008 sql-server

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

使用空间的差异

在查看 SQL Server 中数据文件使用的空间时,SQL 报告的内容与 Windows 之间存在很大差异。

这怎么解释?

SQL 视窗

sql-server-2008 sql-server datafile windows-server

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

DDL 语句错误从不调用 CATCH

在此处输入图片说明 当我尝试关闭下面的 SS Management Studio 窗口时出现错误

我知道 DDL 语句是隐式 COMMIT,下面的警告消息是因为 BEGIN TRAN 从不 COMMIT 或 ROLLBACK。更改 DDL 语句中止并且从未循环通过 CATCH 块。无法理解为什么在错误发生后控制没有传递给 CATCH 块(这在任何其他 DML 语句中都会发生)你能解释一下为什么 CATCH 中的语句从未针对此 DDL 错误执行吗?

sql-server-2008 transaction ddl

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