小编kmo*_*ote的帖子

在数据库中存储单位的最佳方式

我继承了一个包含数百个列的大型 (SQLServer) 数据库,这些列代表一件事或另一件事的数量。这些值的单位(例如“加仑”、“英寸”等)存储在扩展属性的 MS_Description 字段中。我想知道是否有更好的方法来存储这些信息。我认为用于文档目的很好,但很难根据这些数据进行可靠的单位换算计算。在这一点上,我不准备进行侵入性更改,但如果我有机会这样做,在这方面推荐的最佳实践是什么?在我的脑海中,选项可能包括:

  • 将列名称更改为包含的单位(例如,“TotalVolumeInGallons”。这会使信息更容易获得,但对我来说仍然很弱。)
  • 添加一个单独的“单位”列以对应每个“金额”列(此列可以是 nvarchar 或者它可以是单独的 Units 表的外键,这可能会使计算单位转换变得更容易。另一方面,添加如此许多列可以使我的数据库的大小翻倍 - 具有非常冗余的数据。)
  • 在专门用于单位的扩展属性中创建一个新字段。(不幸的是,我认为这不能成为 Units 表的外键。)
  • 还有我忽略的另一个想法吗?

更新:阅读@Todd Everett 的回答后,我想到了一个可能的解决方案,所以我将继续回答我自己的问题。(见下文)

database-design sql-server metadata

23
推荐指数
5
解决办法
2万
查看次数

在 RAISERROR 中使用 FLOAT

我正在使用RAISERROR()提供一些基本的单元测试功能(如这里),但我对无法FLOATs在错误消息中使用感到沮丧。我知道我可以将浮点数转换为字符串,但我RAISERROR在每个单元测试中都使用,我不想为每个测试添加另一行代码。(我的单元测试已经够啰嗦了!)有没有办法在参数列表中执行内联强制转换/转换RAISERROR?或者有其他方法可以解决这个缺陷吗?

更新: 所以最终我希望我能做的是:

RAISERROR('Unit Test FAILED! %f', 11, 0, @floatParm)
Run Code Online (Sandbox Code Playgroud)

不幸的是,RAISERROR一般不处理 %f 或浮点数。所以我必须这样做:

DECLARE @str VARCHAR(40) = CAST(@floatParm AS VARCHAR(40))
RAISERROR('Unit Test FAILED! %s', 11, 0, @str)
Run Code Online (Sandbox Code Playgroud)

...当它分散在数十个单元测试中时,它看起来就像一团糟。所以我想把它归结为这样的:

RAISERROR('Unit Test FAILED! %s', 11, 0, CAST(@floatParm AS VARCHAR(40))
Run Code Online (Sandbox Code Playgroud)

但这给了我一个Incorrect syntax near 'CAST'信息。我不明白为什么这是非法的,但确实如此。我可以在这里使用另一个“一个班轮”吗?

sql-server t-sql

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

SSMS 解决方案和项目的替代方案?

根据官方SQL Server 文档,不推荐使用“解决方案、项目和项目”。MSDN 页面顶部的显眼(虽然有些神秘)警告横幅指出:

“此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。”

不幸的是,没有提供替代存储/容器策略的建议。那么,存储和打包构成数据库应用程序的各种脚本、查询和文件的推荐方法是什么?我也很想知道你们中是否有人在您当前的工作中实际使用了解决方案或项目框架,以及您使用它们的目的。

[注意:我意识到我可以使用 VS2010 来实现这个功能,但我对基于 SSMS 的方法感兴趣(原因在这个问题的答案中表达了)。]

sql-server-2008 ssms sql-server-tools

8
推荐指数
1
解决办法
781
查看次数