小编c44*_*548的帖子

FORMAT 返回大行大小和数据大小

我对我的一项发现感到惊讶,即使用 aFORMAT ()确实对行大小和数据大小有很大影响。它几乎是不应用的大小的 250 倍FORMAT ()

我的问题是:
1)为什么使用FORMAT()对大小有这么大的影响?对我来说,只有 1.23 美元与 1.23 美元的差异,这可能是 1 个字符的差异。这么大的尺寸有关系吗?

2) 为什么我们仍然鼓励FORMAT()在 SQL Server 中使用而不是使用字符串连接,如下所示。由于下面只有 2 倍的数据大小,使用格式返回 250 倍的数据大小。或者数据大小不是一个关键的衡量标准?

SELECT '$' + CONVERT(varchar(10), UnitPrice) FROM Sales.SalesOrderDetail;
Run Code Online (Sandbox Code Playgroud)

3) 数据大小为 464MB 是否意味着我将向客户端返回 464MB 的数据?

================================================== ======

以下是我对 AdventureWorks2012 数据库的发现。

SELECT UnitPrice FROM Sales.SalesOrderDetail;
Run Code Online (Sandbox Code Playgroud)

实际行
数:121317
估计行数:121317估计行大小:15B
估计数据大小:1777KB

SELECT '$' + CONVERT(varchar (10), UnitPrice) FROM Sales.SalesOrderDetail;
Run Code Online (Sandbox Code Playgroud)

实际行数:121317
估计行大小:26B
估计数据大小:3060KB

SELECT FORMAT(UnitPrice, 'c') FROM Sales.SalesOrderDetail;
Run Code Online (Sandbox Code Playgroud)

实际行数:121317
估计行大小:4011B
估计数据大小:464MB

sql-server sql-server-2012

7
推荐指数
1
解决办法
131
查看次数

复式记账架构设计

我们正在实施一个软件,允许在内部用户之间发送“虚拟”资金。我们已经使用如下单个条目启动了我们的数据库(简化表)。我们只记录一笔交易,其中用户发起的交易(汇款)都会被记录下来。所以它永远是一个借方。

TransactionLog
------------------
TransactionLogID
UserIDFrom
UserIDTo
CurrencyID
CurrencyAmount 
Remarks
TransactionDateTime
Run Code Online (Sandbox Code Playgroud)

然后需求发生变化,说明我们需要在我们的数据库中使用复式记账模式。然后我做了一个新表如下。

TransactionLogDoubleEntry
----------------------------
TransactionLogDoubleEntryID
TransactionLogID
UserID
CounterPartyUserID
CreditOrDebit
CurrencyID
CurrencyAmount
Remarks
TransactionDateTime
Run Code Online (Sandbox Code Playgroud)

我的问题:
1)我是否 以正确的方向执行此操作,即我添加TransactionLogDoubleEntry带有贷记/借记的表,这意味着它已经成为复式记帐模式?

2)我应该留在桌子上TransactionLog吗?或者使用TransactionLogDoubleEntry就足够了?

3)如果我要留在TransactionLog桌子上,我是否有必要复制currencyID, currencyAmount, remarks, TransactionDateTimein TransactionLogDoubleEntry?或者这足以从TransactionLog表中获取相应的值。

database-design

5
推荐指数
1
解决办法
644
查看次数

按内部子查询排序

假设我通过从现有表执行分组来选择如下临时表,这是当前的临时表值:

Title Count
-------------
Sr.   11
Mrs.  2
Sra.  3
Ms.   415
Mr.   578
Run Code Online (Sandbox Code Playgroud)

我想要实现的是标题的逗号分隔值,如下所示,按计数排序

[Mrs.], [Sra.], [Sr.], [Ms.], [Mr.]
Run Code Online (Sandbox Code Playgroud)

但是,目前我只能实现以下逗号分隔值,这是#temptable 中的默认排序

[Sr.], [Mrs.], [Sra.], [Ms.], [Mr.]
Run Code Online (Sandbox Code Playgroud)

下面是我的代码。我怎样才能达到我想要的?
注意:在插入#temptable 时,我既不假设也不期望序列已经按顺序排列

DECLARE @Columns as VARCHAR(MAX)
SELECT @Columns =
COALESCE(@Columns + ', ','') + QUOTENAME(Title)
FROM
   (
    SELECT Title FROM #tempTable1
   ) AS P
Run Code Online (Sandbox Code Playgroud)

sql-server

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

WHERE 基于多列

我正在尝试在 sql server 2012 中实现类似的功能。但是这种语法不存在。它有什么替代方案,为什么 sql server 不支持这种语法糖?

这意味着 C1 匹配 D1,C2 匹配 D2,Cn 匹配 Dn。当所有列匹配时,它只会过滤掉结果。

SELECT * FROM tableA
WHERE
   ([C1], [C2],..., [Cn]) IN (SELECT [D1], [D2],..., [Dn] FROM tableB)
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012

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