都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

英文書くのに便利だなぁと思って紹介してみる

 今年から英語がかなり必要、というか生きていけない環境になりそうなので急遽勉強をはじめました。英単語の総復習には、milkan を使っています。

英単語アプリ mikan

英単語アプリ mikan

  • mikan Co.,Ltd.
  • 教育
  • 無料

 TOEIC も受験していきたいと思ったので、トレーニンTOEIC ® test も使用しています。

トレーニング TOEIC ® test

トレーニング TOEIC ® test

  • Flipout LLC
  • 教育
  • 無料

 上記以外には、自分のブログに投稿するのも日本語と英語の記事を投稿します。投稿時に英文法をチェックするのに使用しているのが、Ginger Page です。
www.getginger.jp

 使い方は非常に簡単です。下記の記事から、一文間違った状態でチェックにかけけてみます。
ryuchan.hatenablog.com

 赤字の間違いを仕込んだ文章です。

The end of HEISEI ( 平成 ), REIWA ( 令和 ) has begin. The last year of HEISEI was turning point in my life. However, I still want to evolve, so I want to move forward without fear of change.
I will explain about TRANSLATE (Transact-SQL) - SQL Server | Microsoft Docs. Complex processing in REPLACE function can be describe very simply by TRANSLATE function. Let's compare the description contents of REPLACE function and TRANSLATE function.

 まず、チェックする文章を貼り付け、Ginger it! をクリックします。

f:id:koogucc11:20190503131005p:plain
チェックする文章を貼り付け

 begin → begun に変更されています。

f:id:koogucc11:20190503131159p:plain
begin → begun

 describe → described に変更されています。

f:id:koogucc11:20190503131319p:plain
describe → described

 この機能を使い、投稿前に英文のチェックをしています。また、Sentence Rephaser という機能もあり、イケてる言い回し候補を提案する機能もあります。コツコツ勉強していこう。

Some useful SQL functions, syntax, and more - Part 18 ( REIWA GANNEN Memorial Post )

The end of HEISEI ( 平成 ), REIWA ( 令和 ) has begun. The last year of HEISEI was turning point in my life. However, I still want to evolve, so I want to move forward without fear of change.
I will explain about TRANSLATE (Transact-SQL) - SQL Server | Microsoft Docs. Complex processing in REPLACE function can be described very simply by TRANSLATE function. Let's compare the description contents of REPLACE function and TRANSLATE function.

Let's execute the following query in SQL Server Management Studio.

DECLARE @str NVARCHAR(255) = 'aaa,aaa,aaa|bbb,bbb,bbb'

SELECT
    REPLACE(REPLACE(REPLACE(@str,'|','*'),',','|'),'*',',') [REPLACE],
    TRANSLATE(@str, ',|', '|,') [TRANSLATE]

f:id:koogucc11:20190429083951p:plain
Execution result of REPLACE and TRANSLATE

The features of TRANSLATE function are as follows.

The behavior of the TRANSLATE function is similar to using multiple REPLACE functions. TRANSLATE does not, however, replace a character more than once. This is dissimilar to multiple REPLACE functions, as each use would replace all relevant characters.

In stored procedures, I often find that the RELACE function is nested in multiple layers. Although not available in all cases, use TRANSLATE function to refactor complex stored procedures.

I bought this magazine. I will do my best to study English!!

便利な SQL の関数とか、構文とか、その他色々まとめてみる - その18 ( 令和元年記念投稿 )

 平成も終わり、令和が始まりました。平成最後の年は、自分自身として人生の転機でした。ただ、まだまだ進化はしていきたいので、変化を恐れず進んでいきたいと思っています。
 今回は、TRANSLATE (Transact-SQL) - SQL Server | Microsoft Docs について説明します。一見、REPLACE (Transact-SQL) - SQL Server | Microsoft Docs 似ていますが、REPLACE では複雑になってしまう処理も TRANSLATE では非常に簡潔に記述することが可能です。それでは、REPLACE と TRANSLATE で記述内容を比較してみましょう。下記のクエリを SQL Server Management Studio で実行してみましょう。

DECLARE @str NVARCHAR(255) = 'aaa,aaa,aaa|bbb,bbb,bbb'

SELECT
    REPLACE(REPLACE(REPLACE(@str,'|','*'),',','|'),'*',',') [REPLACE],
    TRANSLATE(@str, ',|', '|,') [TRANSLATE]

f:id:koogucc11:20190429083951p:plain
REPLACE と TRANSLATE の実行結果

 TRANSLATE は下記の部分が特徴となります。

TRANSLATE 関数の動作は、複数の REPLACE 関数を使用した場合と似ています。 ただし、TRANSLATE では文字が複数回置き換えられることはありません。 これは、使用するたびに関連するすべての文字が置き換えられる複数の REPLACE 関数とは異なります。

 ストアドプロシージャでよく RELACE 関数が何重にも入れ子になっている処理を見かけることがあります。全ての場合において使用できるわけではありませんが、TRANSLATE を使って、複雑になってしまったストアドプロシージャをリファクタリングしましょう。

The features you should know about SQL Server Management Studio - Part 14 - (New Features in SSMS 18)

Golden Week of 10 consecutive holidays has started. It's a historical Golden Week that changes from HEISEI( 平成 ) to REIWA( 令和 ) during consecutive holidays. Recently, I thought that SQL Server CTP update was quick. SSMS 18 has become generally available. Whenever a new version comes out related to SQL Server, I tend to look around dmv, execution plans. Since there were changes in the SSMS graphical execution plan, I tried it.

  • AdventureWorks2017, SalesOrderHeader is used.
  • A NonClustered index of OrderDate is created.

Let's execute the following query in SQL Server Management Studio!

SELECT
    SalesOrderID,
    RevisionNumber,
    OrderDate,
    DueDate,
    ShipDate,
    Status,
    OnlineOrderFlag,
    SalesOrderNumber,
    PurchaseOrderNumber,
    AccountNumber,
    CustomerID,
    SalesPersonID,
    TerritoryID,
    BillToAddressID,
    ShipToAddressID,
    ShipMethodID,
    CreditCardID,
    CreditCardApprovalCode,
    CurrencyRateID,
    SubTotal,
    TaxAmt,
    Freight,
    TotalDue,
    Comment,
    rowguid,
    ModifiedDate
FROM
    AdventureWorks2017.Sales.SalesOrderHeader WITH(INDEX(NonClusteredIndex))
WHERE
    OrderDate BETWEEN '2011-05-30 00:00:00.000' AND '2012-05-31 00:00:00.000'

f:id:koogucc11:20190427181744p:plain
Execution Result

The operator sees something that is unfamiliar when you look closely.

f:id:koogucc11:20190427182111p:plain
New one is displayed to the operator!

The elapsed time, actual number of lines and estimated number of lines are displayed. This sounds good. It is possible to check if there is a statistical problem or not. The red line of 3028 is the actual line, and the blue line of 3041 is the estimated number of lines.

f:id:koogucc11:20190427182532p:plain
actual number of lines and estimated number of lines

Every time a version is upgraded, good improvements are added. Thanx!

SQL Server Management Studio の知っておいたほうが良い機能について挙げてみる - その14 - ( SSMS 18 の新しい機能 )

 さて、10 連休のゴールデンウィークが始まりました。しかも、連休中に平成から令和に変わるという歴史的なゴールデンウィークです。最近、SQL Server の CTP のアップデートが早いなぁと思っていたら、SSMS の 18 が GA されました。SQL Server 関連で新しいバージョンが出たときはどうしても、dmv、実行プラン周りなどに目がいきがちです。SSMS のグラフィカルな実行プランで変更があったので、早速試してみました。
※AdventureWorks2017, SalesOrderHeader を使用しています。
※OrderDate の非クラスタ化インデックスを作成しています。

 下記のクエリを SQL Server Management Studio で実行してみましょう。

SELECT
    SalesOrderID,
    RevisionNumber,
    OrderDate,
    DueDate,
    ShipDate,
    Status,
    OnlineOrderFlag,
    SalesOrderNumber,
    PurchaseOrderNumber,
    AccountNumber,
    CustomerID,
    SalesPersonID,
    TerritoryID,
    BillToAddressID,
    ShipToAddressID,
    ShipMethodID,
    CreditCardID,
    CreditCardApprovalCode,
    CurrencyRateID,
    SubTotal,
    TaxAmt,
    Freight,
    TotalDue,
    Comment,
    rowguid,
    ModifiedDate
FROM
    AdventureWorks2017.Sales.SalesOrderHeader WITH(INDEX(NonClusteredIndex))
WHERE
    OrderDate BETWEEN '2011-05-30 00:00:00.000' AND '2012-05-31 00:00:00.000'

f:id:koogucc11:20190427181744p:plain
実行結果

 よく見ると見慣れないものがオペレータに表示されています。

f:id:koogucc11:20190427182111p:plain
オペレーターに新たな何かが表示されている!?

 オペレーター単位の経過時間、実際の行数および推定の行数が表示されています。これはいいですね。パッとみて統計の問題が発生していないかなど判断することが可能です。赤線の引かれている 3028 が実際の行、青線の引かれている 3041 が推定の行数です。

f:id:koogucc11:20190427182532p:plain
実際の行数と推定の行数

 バージョンアップされるたびに、いい改善が追加されていますね。有難いです。

 こんな SQL Server 本あるのか。ちょっと見てみたい。

 こんな感じのキャンプで使えるチェア欲しい。

 

SQL Server の構造について記事にしてみる - その4 ( SQL Server 2019 をインストールしたら、sys.dm_db_page_info というものを見つけたのでちょっと動きをしらべてみた ) -

 少しだけ SQL Server 2019 をお触りしてみました。その中で一つ気になった sys.dm_db_page_info (Transact-SQL) - SQL Server | Microsoft Docs というものがあり、もしや DBCC PAGE の代替となるものでは!と思い調べてみました。

 DBCC PAGE といえば、『 SQL Server の構造について記事にしてみる 』 でインデックスの構造を調査するのに使用していました。
ryuchan.hatenablog.com

 その後、図とか色々と書くのが面倒なため、シリーズはその3で打ち切りとなっていました(笑) 今回はちょっと興味を持ったので、勢いにまかせて一気に記事書きます。
※『 SQL Server の構造について記事にしてみる - その3 』で使用したクエリをベースにします。
※ データベースは、AdventureWorks2017 を使っています。
※テーブルは、Sales.SalesOrderHeader を使っています。

 それでは、早速下記のクエリを SQL Server Management Studio で実行してみましょう。

SELECT
    dpa.allocated_page_page_id,
    dpa.page_type,
    dpa.page_type_desc,
    dpa.page_level,
    dpa.next_page_page_id,
    dpa.previous_page_page_id
FROM
    sys.dm_db_database_page_allocations(DB_ID(), OBJECT_ID('Sales.SalesOrderHeader'), null, NULL, 'DETAILED') dpa

f:id:koogucc11:20190421113513p:plain
クエリの結果

 次に、下記のクエリを SQL Server Management Studio で実行してみましょう。

DBCC TRACEON(3604)
DBCC PAGE(N'AdventureWorks2017',1,16416,3) WITH TABLERESULTS
DBCC TRACEOFF(3604)

f:id:koogucc11:20190421113826p:plain
DBCC PAGE の結果

 次に、dm_page_info を使ったクエリを SQL Server Management Studio で実行してみましょう。

SELECT
    pi.*
FROM
    sys.dm_db_database_page_allocations(DB_ID(), OBJECT_ID('Sales.SalesOrderHeader'), null, NULL, 'DETAILED') dpa 
CROSS APPLY 
    sys.dm_db_page_info(dpa.database_id, dpa.allocated_page_file_id, dpa.allocated_page_page_id, 'DETAILED') pi
WHERE
    dpa.allocated_page_page_id = 16416

f:id:koogucc11:20190421114418p:plain
f:id:koogucc11:20190421114435p:plain
f:id:koogucc11:20190421114447p:plain

f:id:koogucc11:20190421114457p:plain
dm_page_info の結果

 DBCC PAGE のヘッダー情報にあたるものくらいが取得できるようです。Undocumented な DBCC コマンドが dmv 化されたか!?と思ったのですが、DBCC PAGE の全ての情報を参照できるものでは無いようです。バージョンアップされることで、データ部、個別情報を出力できる dmv が追加( dm_page_info_detail... とか? )されるのでしょうか。今後のバージョンアップに期待ですね。

最新の iPad mini が欲しい。

Apple iPad mini 4 (Wi-Fi, 128GB) - シルバー (第4世代)

Apple iPad mini 4 (Wi-Fi, 128GB) - シルバー (第4世代)

けど、iPad Pro 11 に使える Pencil も欲しい。
www.amazon.co.jp