投稿

[SQL SERVER] XMLをテーブル形式に変換するSQL

イメージ
以下のXMLデータをテーブル形式に変換する方法を説明します。 <NewDataSet> <row> <Title>タイトル1</Title> <Memo>内容1</Memo> <UserID>test1</UserID> <Count>1</Count> </row> <row> <Title>タイトル2</Title> <Memo>内容2</Memo> <UserID>test2</UserID> <Count>2</Count> </row> </NewDataSet> 一つ目方法! このまま実行してみてください。 DECLARE @XmlData xml SET @XmlData = '<NewDataSet><row><Title>タイトル1</Title><Memo>内容1</Memo><UserID>test1</UserID><Count>1</Count></row><row><Title>タイトル2</Title><Memo>内容2</Memo><UserID>test2</UserID><Count>2</Count></row></NewDataSet>' DECLARE @IntDoc int EXEC sp_xml_preparedocument @IntDoc OUTPUT, @XmlData SELECT Title, Memo, UserID, Count FROM OPENXML(@Intdoc, '/NewDataSet/row',2) WITH (Title nvarchar(20), M...

[SQL SERVER] JSON 文字列をテーブル形式に変換するSQL

イメージ
SQL SERVER 2016からはJSONデータをテーブル化することができます。 以下の例文を参考してください。 DECLARE @json NVARCHAR(MAX) SET @json = N'[{"Title":"タイトル1","Memo":"内容1","UserID":"test1","Count":1},{"Title":"タイトル2","Memo":"内容2","UserID":"test2","Count":2}]' SELECT * FROM OPENJSON (@json) WITH (Title nvarchar(20) '$.Title', Memo nvarchar(20) '$.Memo', UserID varchar(20) '$.UserID', Count int '$.Count') 出力結果

[SQL SERVER] 指定日付が含まれる週の日曜日~土曜日の日付を取得する方法

イメージ
指定した日付が含まれる週の日曜日と土曜日の日付を取得が必要な時があります。 Weekly統計を集計する時良く使います。 DECLARE @LogDate date SET @LogDate = '2018-12-20' DECLARE @StartDate date DECLARE @EndDate date --日曜日~土曜日 SET @StartDate = DATEADD(DD,CASE WHEN DATEPART(dw,@LogDate) = 7 THEN -6 ELSE 1-DATEPART(dw,@LogDate) END, @LogDate) SET @EndDate = DATEADD(DD, 6, @StartDate) SELECT @StartDate AS StartDate, @EndDate AS EndDate 出力結果

[SQL SERVER] 指定日付が含まれる週の月曜日~日曜日の日付を取得する方法

イメージ
指定した日付が含まれる週の月曜日と日曜日の日付を取得が必要な時があります。 Weekly統計を集計する時良く使います。 DECLARE @LogDate date SET @LogDate = '2018-12-20' DECLARE @StartDate date DECLARE @EndDate date --月曜日~日曜日 SET @StartDate = DATEADD(DD,CASE WHEN DATEPART(dw,@LogDate) = 1 THEN -6 ELSE 2-DATEPART(dw,@LogDate) END, @LogDate) SET @EndDate = DATEADD(DD, 6, @StartDate) SELECT @StartDate AS StartDate, @EndDate AS EndDate 出力結果

[SQL SERVER]日付をフォーマット(format)された文字列に変換する

イメージ
SQL SERVER 2012移行からFORMATを利用して日付をフォーマットされた文字列に変換することができます。 使い方は以下の通りです。 DECLARE @LogDate datetime SET @LogDate = GETDATE() SELECT @LogDate AS LogDate, FORMAT(@LogDate, 'yyyy/MM/dd') AS Str1, FORMAT(@LogDate, 'HH:mm') AS Str2 SELECT @LogDate AS LogDate, FORMAT(@LogDate, 'yyyy年MM月dd日') AS Str1, FORMAT(@LogDate, 'HH時mm分') AS Str2 出力結果

[SQL Server] sidを指定してcreate userでDBアカウント作成方法

イメージ
sidを確認するSQLです。 SELECT * FROM sys.server_principals 実行結果 実行結果には「test」DBアカウントのsidは「0x2DC6BE22B74DC549BCAA6E34AE96B33B」です。 では、ミラー サーバーで「test」DBアカウントを作成する時には以下のように記入して実行します。 CREATE LOGIN test WITH PASSWORD = ' testpassword ', SID = 0x2DC6BE22B74DC549BCAA6E34AE96B33B もちろんパスワードはプリンシパル サーバーと同じパスワードを設定してください。 同じSIDでアカウントを作成することでミラーサーバーでのユーザーマッピング問題を解決できます。

[SQL SERVER] Trace Logのtrcファイルの内容を確認する方法

Trace Logのtrcファイルの内容を確認する方法です。 以下のように使えます。 SELECT * FROM fn_trace_gettable('c:\temp\mytrace.trc', default); 行番号を追加して取得したいのであれば以下のように使います。 SELECT IDENTITY(int, 1, 1) AS Sn, * FROM fn_trace_gettable('c:\temp\mytrace.trc', default);