SQL Server

メモ:ある列の値が上限を超えたら新しい行に分割するクエリ

SQL Server でのメモ id qty 1 47 2 14 3 112 を id qty 1 25 1 22 2 14 3 25 3 25 3 25 3 25 3 12 としたい。 サンプルのクエリはテーブル作るのメンドイので、テーブル値コンストラクターで。 テーブル値コンストラクター (Transact-SQL) - SQL Server | M…

SQL Server 実行プランのスキーマを見比べてみる (2017 - 2019)

実行プランのスキーマを見る機会があったので、久々に blog を…。 ここから xsd をダウンロードできます。 Showplan Schema 単純に diff を取ると、2019 では、PDW や Spill、UDF、Page Server 等の情報が詳しく取れるようになってました。 サクッと検証出来…

メモ:DacFx の .NET 6 対応版が出てた

去年は preview じゃないとダメだったけど、 メモ:DacFx を .NET 6 で使用しようとすると、未だ preview 使わないとダメ - お だ のスペース いつのまにか正式版出てた。 www.nuget.org

型を合わせとくとデータが多くなっても安心

この記事は meetup app osaka@6 - connpass の参加記事です。 試した環境:SQL Server 2019 15.0.2080.9 型を合わせてないと、起きる問題の1パターンを紹介します。 今回は、文字列型の char, varchar / nchar, nvarchar 間の話しです。 比較用のテーブルと…

メモ:not in と not exists は等価じゃない

どっかで書いた気もするけど、null が混じったときに結果が違うよと。 select * from (values (1), (2), (3)) as a(id) where a.id not in (select * from (values (null), (2)) as b(id)) 結果無し select * from (values (1), (2), (3)) as a(id) where no…

メモ:互換性レベルは下位バージョンの動作検証には良くない

実働環境が古い SQL Server で手元には新しいのしかない時に、互換性レベル下げたらエラーになってくれるかなー?と思ってやってみたけどダメだった。 ALTER DATABASE 互換性レベル (Transact-SQL) - SQL Server | Microsoft Docs 互換性を 2014相当にしてる…

メモ:DacFx を .NET 6 で使用しようとすると、未だ preview 使わないとダメ

DacFx doesn't work on .NET 6 · Issue #33 · microsoft/DacFx · GitHub NuGet Gallery | Microsoft.SqlServer.DacFx 160.5323.3-preview より上のバージョン使ったらセーフ。

メモ:SELECT - INTO の指定先のテーブルの存在チェックはコンパイル時

1個のクエリ内で drop create で一時テーブル使い回ししたいなーと書いてたらエラーになったのでメモ。 こういうのがエラーになってクエリ自体実行されない。 drop table if exists #temptable select [Name] into #temptable from sys.tables select * from…

メモ:SqlDataReader.GetColumnSchema は データ読まないので明らかに暗黙の型変換でエラーが出る場合でもセーフ

タイトル長い… まあ当然といえば当然なんですが、明らかにダメなやつでも通るとちょっとびっくりする。。 例:文字型の列に 日付型のパラメータ渡す。 using Microsoft.Data.SqlClient; using System; namespace ConsoleApp1 { class Program { static void …

メモ:T-SQL ある範囲内での 小さい順に空き番を見つける

決められた範囲があって、その中で空いている最小の番号を取得するってクエリ。 例:40000~4000000 までの間で未使用の番号を少ない順に10個とる。 範囲用の表を作って存在しないデータ取得 with [範囲] as ( select cast(40000 as bigint) as [番号] union…

Internal retry logic providers in SqlClient の動作確認

SqlClient の内部再試行ロジック プロバイダー - ADO.NET Provider for SQL Server | Microsoft Docs を試したのでログ貼っとく。 環境は .NET 5.0 Microsoft.Data.SqlClient 3.0.0 SqlClient での構成可能な再試行ロジック構成ファイル - ADO.NET Provider …

xUnit.NET の パラレルテスト と SQL Server (Local DB) で bacpac から import のメモ

上手くいくかは未検証! データは、if exists drop database + import bacpac で考える。 ※楽だから Local DB 前提で書いたけど、Local DB じゃなくても問題無さそう。 テスト側ではトランザクション制御出来ない前提。 Web App とかで HTTP 跨ぐようなイメ…

メモ:TransactionScope の既定の分離レベルは Serializable

公式の ドキュメント を探す機会があったのでメモ。 トランザクション スコープを使用した暗黙的なトランザクションの実装 | Microsoft Docs TransactionScope 分離レベルの設定の箇所 から抜粋 既定では、トランザクションは Serializable に設定された分離…

.NET Core で SqlConnection の ConnectTimeout が 15未満に設定しても無視されてそう。

.NET Framework と .NET Core で動作が違う。 SQL Server 2019 Developer Edition (サービスは止めとく) .NET Core 5 / 3.1、.NET Framework 4.8 Microsoft.Data.SqlClient 3.0.0 なんか、.NET Core だと、既定値の 15 未満に設定しても、既定値の 15 で動い…

SqlParameter で ~char(max) の時の Size は -1

size は -1 を渡す。 公式ドキュメントが中々見つからないのが難点…。 大きい値 (max) データの変更 - ADO.NET | Microsoft Docs から抜粋 CREATE PROCEDURE GetDocumentSummary ( @DocumentID int, @DocumentSummary nvarchar(MAX) OUTPUT ) AS SET NOCOUNT…

メモ:T-SQL の TRIM を使って、前後の括弧とか囲ってる文字を取り除く

2017 から SQL Server にも TRIM (Transact-SQL) - SQL Server | Microsoft Docs が追加されてます。 それまでは、LTRIM (Transact-SQL) - SQL Server | Microsoft Docs、RTRIM (Transact-SQL) - SQL Server | Microsoft Docs を組み合わせるという面倒な事…

メモ:EF (Core) で IDbContextTransaction の Rollback は要る?

entity framework - DbContextTransaction Rollback - Stack Overflow ちゃんと Dispose してたら SQL Server 相手にしてる分には無くても良さげ。 他の DB は実装次第なんでちゃんとやった方が良いけど、ちゃんとやるのめんどくさい。。*1 *1:TransactionSc…

メモ:Application Insights で SQL Server のクエリを勝手に取る設定が変わってた

知らんうちに変わってた。 Azure Application Insights における依存関係の追跡 - Azure Monitor | Microsoft Docs SQL 呼び出しの場合、サーバーとデータベースの名前が常に収集され、収集された DependencyTelemetry の名前として保存されます。 "データ" …

再帰クエリで循環参照した時にどうなるのか?(SQL Server, PostgreSQL)

PostgreSQL で循環参照したらどうなるん?って聞かれたので。 PostgreSQL with recursive d as ( select 1 as id, 4 as parentid union select 2 as id, 1 as parentid union select 3 as id, 2 as parentid union select 4 as id, 3 as parentid ), cte as …

2/5(金) devblogラジオ vol.9 で DB の雑談します

明日ですが、 devblogラジオ vol.9 - connpass に参加します。 ムッシュ と 兄貴 とお話しするの久々なのでめっちゃ楽しみ! 夜ですけどお時間あるかたは是非ご参加を~。

ScriptDom で サブクエリを CTE に書き換えるサンプル(叩き台)

だいぶ昔に書いた SQL Server のバージョン毎の TSqlParser - お だ のスペース にコメントが付いてたので雑にサンプル。 yutap01 だいぶ昔の投稿についての質問になります。 よろしければお知恵を拝借したいのですが、 TSqlParserを使って、複雑なTSQLを複…

1/30(土) meetup app osaka@5 に参加します #meetupapp

meetup app osaka@5 - connpass このご時世なんで オンラインの ZOOM ですが、お時間があればぜひ~。 SQL DB をソースに Azure Cognitive Search を使うときのメモ - お だ のスペース や関係ない質問でも答えれる限り答えま~。 座談会っぽい感じみたいな…

SQL DB をソースに Azure Cognitive Search を使うときのメモ

Azure SQL Database のデータを Azure Cognitive Search で全文検索するときに見る資料とかメモ 兼 meetup app vol.5? の資料。 価格 Cognitive Search 料金 - Search | Microsoft Azure インデックス作るのに AI 使うと追加でお金掛かりそう。 AI エンリッ…

メモ:T-SQL FOR XML は XML にするから XML でエスケープ必要な文字がエスケープされる

メモ:T-SQL 単一列の結果表をシンプルな JsonArray にしたい - お だ のスペース で、XML にしたいわけじゃないのに FOR XML 使ってますが、こういう時に XML でエスケープ必要な文字があった場合困ることが起きます。 前回のデータを変えて試してみます。 …

メモ:T-SQL 単一列の結果表をシンプルな JsonArray にしたい

create table [データ] ( [Id] bigint not null identity(1, 1) primary key , [Name] nvarchar(20) not null ) go insert into [データ] ([Name]) values (N'あいうえお') , (N'かきくけこ') から ["あいうえお", "かきくけこ"] にしたい場合のクエリ。 参…

メモ:T-SQL OUTPUT 句使ったときに INTO 付けてないと TRIGGER あったら怒られる

OUTPUT 句 (Transact-SQL) - SQL Server | Microsoft Docs トリガー 使ってたら怒られたのでドキュメントのメモ。 INTO キーワードを指定せずに OUTPUT 句を指定すると、DML 操作を行った先では、その DML アクションに対して定義されたトリガーを有効化でき…

メモ:PowerShell 7 (Core) で bacpac を import する

NuGet Gallery | Microsoft.SqlServer.DACFx 150.4897.1 と NuGet Gallery | Microsoft.Data.SqlClient 2.0.1 が必要。 で、PowerShell 7 で Microsoft.Data.SqlClient を使うには、ちょい注意が。 PowerShell (7.0.2) で Microsoft.Data.SqlClient 2.0 を使…

Azure Pipelines の Windows Agent で SQL Server 2019 Local DB を使う

前にこんなの書いてたんですが、Pipelines に代わってから使うの初ということで試してました。 VSTS の ビルドで SQL Server LocalDB を使ってテストしたい - お だ のスペース んで、今の最新の Windows Agent でバージョン調べてみると… Microsoft SQL Ser…

メモ:T-SQL bit 型での order by

スカラー値を返すクエリを書いてて、bit 型の列が複数行返ってくるけど、true 優先で取りたい時に、bit 型そのままだと max、min 使えないので、order by で。 雑なクエリ例 select top(1) [flg] from ( select cast(0 as bit) as [flg] union all select ca…

DO's&DONT's リンク

Microsoft SQL Server Japan Support Team Blog が無くなって、Technet フォーラムに移ってますが DO's&DONT's を人に紹介する機会があったのでついでに直リンメモ。 空き番ありますが、投稿見つからないので移行されなかった? DO's&DONT's #1: やらない方…