データベース スナップショットについてのメモ
データベースの「ある時点」の読取り専用コピー
○メリット1
ミラーリングした際に、通常は待機側(復元状態)データベースの
内容を見ることは出来ないが、データベーススナップショットを
作成すれば、読み取り専用サーバーとして使うことが出来る。
○メリット2
テスト時に使える。
テスト開始前の状態のデータベーススナップショットを
作成した状態でテストを実行、結果を確認後に
データベーススナップショットの時点の状態に戻す。
2008年10月20日月曜日
2008年9月18日木曜日
最後(直前)に追加されたデータのIDを取得する
追加したデータのIDを別のテーブルにも設定する場合など、
直前に追加されたID(identity)の値を知りたい時には
@@identity
の値を取得する。
関連リンク:
@@IDENTITY (Transact-SQL)
直前に追加されたID(identity)の値を知りたい時には
@@identity
の値を取得する。
関連リンク:
@@IDENTITY (Transact-SQL)
2008年8月20日水曜日
【Transact-SQL】日付の加算・減算(その1)
--日付の加算・減算を行なう。
--1日を1とした場合の各時間の値
-- 3時間=0.125
-- 6時間=0.25
-- 9時間=0.375
--12時間=0.5
DECLARE @date DATETIME
SET @date = CONVERT(DATETIME, '2008/10/10 12:00:00')
PRINT @date + 0.5
PRINT @date + 0.375
PRINT @date + 0.25
PRINT @date + 0.125
PRINT @date
PRINT @date - 0.125
PRINT @date - 0.25
PRINT @date - 0.375
PRINT @date - 0.5
--【実行結果】
-- 10 11 2008 12:00AM
-- 10 10 2008 9:00PM
-- 10 10 2008 6:00PM
-- 10 10 2008 3:00PM
-- 10 10 2008 12:00PM
-- 10 10 2008 9:00AM
-- 10 10 2008 6:00AM
-- 10 10 2008 3:00AM
-- 10 10 2008 12:00AM
--1日を1とした場合の各時間の値
-- 3時間=0.125
-- 6時間=0.25
-- 9時間=0.375
--12時間=0.5
DECLARE @date DATETIME
SET @date = CONVERT(DATETIME, '2008/10/10 12:00:00')
PRINT @date + 0.5
PRINT @date + 0.375
PRINT @date + 0.25
PRINT @date + 0.125
PRINT @date
PRINT @date - 0.125
PRINT @date - 0.25
PRINT @date - 0.375
PRINT @date - 0.5
--【実行結果】
-- 10 11 2008 12:00AM
-- 10 10 2008 9:00PM
-- 10 10 2008 6:00PM
-- 10 10 2008 3:00PM
-- 10 10 2008 12:00PM
-- 10 10 2008 9:00AM
-- 10 10 2008 6:00AM
-- 10 10 2008 3:00AM
-- 10 10 2008 12:00AM
2008年8月19日火曜日
【SQL】文字数をあわせるため不足分を0で埋める
--取得した日付を年月日に分解する。
--分解した際の文字数が足らない場合は左側を0で埋める。
DECLARE @date datetime
SET @date = getdate()
--分解した値を必要な文字数のVARCHARにキャストするのがポイント
PRINT right('00' + CONVERT(varchar(4),DATEPART(YEAR,@date)),4)
PRINT right('00' + CONVERT(varchar(2),DATEPART(MONTH,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(DAY,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(HOUR,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(MINUTE,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(SECOND,@date)),2)
--実行結果 : 値が一桁の場合には左側に0が入っている。
--2008
--08
--19
--20
--18
--01
--分解した際の文字数が足らない場合は左側を0で埋める。
DECLARE @date datetime
SET @date = getdate()
--分解した値を必要な文字数のVARCHARにキャストするのがポイント
PRINT right('00' + CONVERT(varchar(4),DATEPART(YEAR,@date)),4)
PRINT right('00' + CONVERT(varchar(2),DATEPART(MONTH,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(DAY,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(HOUR,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(MINUTE,@date)),2)
PRINT right('00' + CONVERT(varchar(2),DATEPART(SECOND,@date)),2)
--実行結果 : 値が一桁の場合には左側に0が入っている。
--2008
--08
--19
--20
--18
--01
2008年7月30日水曜日
【SQL】重複のあるデータをHaving句で取得
--HAVING句を使ってidに重複のあるデータのみ取得する。
--概要・・・
--①id ごとに件数を集計する。(GROUP BY)
--②集計した結果が1より大きいものを選択する。(HAVING)
--テーブルtbl_dataの構成例
--[id] AS int
--[data] AS varchar(50)
SELECT [id]
FROM [tbl_data]
GROUP BY [id]
HAVING COUNT(*) > 1
--概要・・・
--①id ごとに件数を集計する。(GROUP BY)
--②集計した結果が1より大きいものを選択する。(HAVING)
--テーブルtbl_dataの構成例
--[id] AS int
--[data] AS varchar(50)
SELECT [id]
FROM [tbl_data]
GROUP BY [id]
HAVING COUNT(*) > 1
2008年7月23日水曜日
【Transact-SQL】引数で値を返すストアドプロシージャの作成
--引数で値を返すストアドプロシージャの作成
CREATE PROCEDURE st_get_output_data
(
@inArg1 varchar(16)
,@outArg1 varchar(32) OUTPUT
)
AS
BEGIN
SET @outArg1='@inArg1 is ' + @inArg1
RETURN 0
END
--ストアドプロシージャの実行
DECLARE @RC int
DECLARE @inArg1 varchar(16)
DECLARE @outArg1 varchar(32)
SET @inArg1 = 'test data'
EXECUTE @RC = [test].[dbo].[st_get_output_data]
@inArg1
,@outArg1 OUTPUT
SELECT @outArg1
--実行結果
--@inArg1 is test data
CREATE PROCEDURE st_get_output_data
(
@inArg1 varchar(16)
,@outArg1 varchar(32) OUTPUT
)
AS
BEGIN
SET @outArg1='@inArg1 is ' + @inArg1
RETURN 0
END
--ストアドプロシージャの実行
DECLARE @RC int
DECLARE @inArg1 varchar(16)
DECLARE @outArg1 varchar(32)
SET @inArg1 = 'test data'
EXECUTE @RC = [test].[dbo].[st_get_output_data]
@inArg1
,@outArg1 OUTPUT
SELECT @outArg1
--実行結果
--@inArg1 is test data
登録:
投稿 (Atom)