このラボの本質は、n番目の検証、ストアドプロシージャ、およびトリガーをMS SQLで記述することでした。 すべてのトリガー、検証、およびストアドプロシージャは非常に単純ですが、これは最初の実験室のものであり、さらに悪化します。複数階のSQLクエリと非常に大きなストアドプロシージャがあります。
2018年にそのようなことを勉強するのに時間を費やすことはあまり実用的ではないようです。つまり、誰も裸のデータベースを使用せず、すぐにクライアントに出力します。 すべてのアプリケーションにはビジネスロジックがあり、一定のスケーリングと変更の影響を受けます。 また、DBMSのみをサーバー側として使用して解決できない多くの問題が発生する可能性があるため、データベース上のすべてを結び付けることは正しくありません。
そのような問題の例は次のとおりです。
- 別のデータベースを使用する必要性
- さまざまなクライアントパーティ(JSON、HTML、XMLなど)のいくつかの形式でデータを出力する必要性
- テーブル、列の追加と変更、またはそれらの名前の変更。各テーブルまたは列に関連するすべての変更を伴います
- サーバーにインストールされている他のデータベースからデータを取得する必要がある、または一般に他のサービスからデータを受信する必要がある
電子メールを送信するために必要なものの典型的な例を考えてみましょう
MS SQLを介してメッセージを送信した場合の外観
DECLARE @tableHTML NVARCHAR(MAX) ;
SET @tableHTML =
N'<H1>Work Order Report</H1>' +
N'<table border="1">' +
N'<tr><th>Work Order ID</th><th>Product ID</th>' +
N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
N'<th>Expected Revenue</th></tr>' +
CAST ( ( SELECT td = wo.WorkOrderID, '',
td = p.ProductID, '',
td = p.Name, '',
td = wo.OrderQty, '',
td = wo.DueDate, '',
td = (p.ListPrice - p.StandardCost) * wo.OrderQty
FROM AdventureWorks.Production.WorkOrder as wo
JOIN AdventureWorks.Production.Product AS p
ON wo.ProductID = p.ProductID
WHERE DueDate > '2004-04-30'
AND DATEDIFF(dd, '2004-04-30', DueDate) < 2
ORDER BY DueDate ASC,
(p.ListPrice - p.StandardCost) * wo.OrderQty DESC
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
EXEC msdb.dbo.sp_send_dbmail @recipients='yourfriend@Adventure-Works.com',
@subject = 'Work Order List',
@body = @tableHTML,
@body_format = 'HTML' ;
, ?
, . , .
, . . websockets, , , websockets , .
:
, .
, . - , .
SQL. -- , , .
- — , , .
- — .
- INSERT — , .
- — NodeJS .
- — , .
, .
, , , .
, , . SQL . . , .
, , .
UPD 13.02.2018
speshuric