Transact-SQL
基本情報
- 対応状況
SQL Server 2005 , SQL Server 2008 , SQL Server 2000でも動いたよ。 パスワードは空パスでは駄目のようだ。絶対パスワードが設定してあること。
- CAST および CONVERT
VBのFormatに近い関数
初期設定/エラー情報
- SSMS で「変更の保存が許可されていません」というエラー メッセージが表示される 参考
原因:SQL Server Management Studio で [テーブルの再作成が必要になる変更を保存しない] オプションが既定で有効になっているため 対策: 1.SQL Server Management Studio を開きます。 2.[ツール] メニューの [オプション] をクリックします。 3.[オプション] ウィンドウのナビゲーション ウィンドウで、[デザイナー] をクリックします。 4.[テーブルの再作成が必要になる変更を保存しない] チェック ボックスをオンまたはオフにして、[OK] をクリックします。
サンプル
- 今日の日付から2か月前の伝票番号を求める
DECLARE @Ymd nchar(6); -- 西暦 YYMMDD DECLARE @PickNo nchar(11); DECLARE @MonthAgo datetime;
- 今日から2ヶ月前のPickNo求める
set @MonthAgo = dateadd(mm,-2,GETDATE()) set @Ymd = CONVERT(varchar, @MonthAgo, 12) set @PickNo = @Ymd + '00000' print @PickNo
- 求めたPickNo以前のデータをテーブルを削除する
DELETE FROM [PickDB].[dbo].[BoxListDB] Where PickNo < @PickNo DELETE FROM [PickDB].[dbo].[JusinDB] Where PickNo < @PickNo DELETE FROM [PickDB].[dbo].[FG_PickNo] Where PickNo < @PickNo DELETE FROM [PickDB].[dbo].[janDB] Where PickNo < @PickNo
結果:11090100000(2011/11/01の場合)
- 移動平均(Null未対応)参考
販売数の今日から過去10日のVol平均SELECT saledate ,code ,AVG(vol) OVER(ORDER BY saledate ROWS BETWEEN 10 preceding AND current row) AS "販売数の10日平均" FROM sample
- over partition by の使い方
select 年 ,年月 ,出費 ,sum(出費) over(partition by 年 order by 年月 rows between 1 preceding and 1 preceding ) as "1行前の出費" ,sum(出費) over(partition by 年 order by 年月 rows between 1 following and 1 following ) as "1行後の出費" ,count(*) over(partition by 年 order by 年月 rows between unbounded preceding and current row) as "現在の行数" ,count(*) over(partition by 年 order by 年月 rows between 1 following and unbounded following ) as "残り行数" from データ;
- 最大値のあるレコードの列項目を参照する方法 参考
- ROW_NUMBER() の使い方
グループごとに連番を振りなおすSELECT * , ROW_NUMBER() OVER(PARTITION BY day1 ORDER BY day1,gengetu desc) Num FROM [Kato].[dbo].[g] order by day1,Gengetu desc
実行結果例
Cd | Gengetu | Day1 | End1 | Vol1 | Num |
591 | Dec-24 | 2024/2/9 | 9763 | 5130 | 1 |
591 | Oct-24 | 2024/2/9 | 9758 | 278 | 2 |
591 | Aug-24 | 2024/2/9 | 9761 | 36 | 3 |
591 | Jun-24 | 2024/2/9 | 9761 | 37 | 4 |
591 | Apr-24 | 2024/2/9 | 9761 | 1 | 5 |
591 | Feb-24 | 2024/2/9 | 9750 | 20 | 6 |
- 前行のデータを表示する
Select 日付, 始値 ,Lag(日付,1) OVER ( ORDER BY 日付) as '前日' ,Lag(始値,1) OVER ( ORDER BY 日付) as '前日225始値' From Nk225
DB設定関係
- バックアップ
BACKUP DATABASE PickDB TO DISK = N'D:\BACKUP\PickDB.BAK' WITH INIT
- インデックス再構成
USE [PickDB] ' DB指定 GO
SET STATISTICS TIME ON
'インデックス再構成 ALTER INDEX [Index_janDB] ON [dbo].[janDB] REORGANIZE WITH ( LOB_COMPACTION = ON ) ALTER INDEX [Idx_JusinDB] ON [dbo].[JusinDB] REORGANIZE WITH ( LOB_COMPACTION = ON ) ALTER INDEX [index_BoxListDB] ON [dbo].[BoxListDB] REORGANIZE WITH ( LOB_COMPACTION = ON ) ALTER INDEX [PK_FG_PickNo] ON [dbo].[FG_PickNo] REORGANIZE WITH ( LOB_COMPACTION = ON ) ALTER INDEX [IX_FG_PickNo] ON [dbo].[FG_PickNo] REORGANIZE WITH ( LOB_COMPACTION = ON ) ALTER INDEX [Idx_sZMMAKER] ON [dbo].[sZMMAKER] REORGANIZE WITH ( LOB_COMPACTION = ON ) ALTER INDEX [Idx_sZMHIN] ON [dbo].[sZMHIN] REORGANIZE WITH ( LOB_COMPACTION = ON ) SET STATISTICS TIME OFF GO
参考・読み物
参考書籍
サイト内リンク
SQL Server系
- sqlcmdユーティリティ バッチファイルにより、SQLCMDを実行しバックアップを行う(.bakファイル作成)
- BCPの使い方
- BULK INSERT
- バッチファイル
その他DB系
その他