トップ 一覧 ping 検索 ヘルプ RSS ログイン

Transact-SQL 基本の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Transact-SQL 基本
*http://msdn.microsoft.com/ja-jp/library/ms365303(v=SQL.90).aspx
[SQL Server]
[SQL Server][Transact-SQL]
!!ステートメントをデータベース エンジンに送信する
::Transact-SQL ステートメントは次の方法で作成してデータベース エンジンに送信できる。
*SQL Server Management Studio または、[Management Studio Express(無料)|http://go.microsoft.com/fwlink/?LinkID=37075&clcid=0x409] を使用
*[sqlcmd ユーティリティ|http://msdn.microsoft.com/ja-jp/library/ms162773(v=SQL.90).aspx]を使用
*作成したアプリケーションから接続

!!!デーベースオブジェクトの作成
!!データベースを作成
::[CREATE DATABASE|http://msdn.microsoft.com/ja-jp/library/ms176061(v=SQL.90).aspx]
 create database TestData
 go
""GO キーワードは、複数のステートメントを単一のバッチで送信した場合に、ステートメントを区切る。

!!テーブルの作成
!USE コマンドを実行して、データベースのコンテキストを TestData データベースに変更する
 use TestData
 go
!テーブルの作成
::[CREATE TABLE|http://msdn.microsoft.com/ja-jp/library/ms174979(v=SQL.90).aspx]
*Products という名前のテーブルを作成
 create table dbo.Products (
     ProductID int primary key not null,
     ProductName varchar(25) not null,
     Price money null,
     ProductDescription text null
 )
 go

!!データの挿入と更新
!挿入
::[INSERT|http://msdn.microsoft.com/ja-jp/library/ms174335(v=SQL.90).aspx]
 insert dbo.Products (ProductID, ProductName, Price, ProductDescription)
     values(1, 'Clamp', 12.48, 'Workbentch clamp')
 go
!更新
::[UPDATE|http://msdn.microsoft.com/ja-jp/library/ms177523(v=SQL.90).aspx]
 update dbo.Products
     set ProductName = 'Flat Head Screwdriver'
     where ProductID = 1
 go

!!データの読み取り
::[SELECT|http://msdn.microsoft.com/ja-jp/library/ms189499(v=SQL.90).aspx]
 select * from dbo.Products
 go

!!!データベース オブジェクトに対する権限の構成
!!ログインの作成
*データベース エンジンにアクセスするには、ユーザーのログインが必要
!ログイン
+ユーザーの ID を Windows のアカウントまたは Windows グループのメンバとして表す
+SQL Server のみに存在する SQL Server ログインを使用

""既定では、コンピュータの管理者には SQL Server へのフル アクセス権が与えられる
!新しい Windows アカウントを作成
::ユーザー Yagi を作成
{{ref_image sqlsvr_sample05.jpg}}
::これだけではログインできない
*ログインできませんでした(Microsoft SQL Server、エラー:18456)
{{ref_image sqlsvr_sample06.jpg}}

!ログインを作成
::[CREATE LOGIN|http://msdn.microsoft.com/ja-jp/library/ms189751(v=SQL.90).aspx]
 create login [ComputerName\Yagi]
     from windows
     with default_database = [TestData];
 go

::エラーメッセージが変わった
*規定のデータベースを開けません(Microsoft SQL Server、エラー:4064)
{{ref_image sqlsvr_sample07.jpg}}

!データベースへのアクセス権の付与
*TestData データベースに切り替えてから CREATE USER ステートメントを使用して、ユーザーにそのログインをマップする。
::[USE|http://msdn.microsoft.com/ja-jp/library/ms188366(v=SQL.90).aspx]
 use [TestData];
 go
::[CREATE USER|http://msdn.microsoft.com/ja-jp/library/ms173463(v=SQL.90).aspx]
 create user [Yagi] for login [ComputerName\Yagi];
 go


""これで、SQL Server のインスタンスと、データベースにアクセスできるようになる
!!!ビューとストアド プロシージャ
[SQL Server ストアド プロシージャ]
*ビューは、格納された SELECT ステートメント
*ストアド プロシージャは、バッチとして実行される 1 つ以上の Transact-SQL ステートメント
!!ビューを作成
::[CREATE VIEW|http://msdn.microsoft.com/ja-jp/library/ms187956(v=SQL.90).aspx]
 create view vw_Names
     as
        select ProductName, Price from Products;
 go

!!ストアド プロシージャ
!作成
::[CREATE PROCEDURE|http://msdn.microsoft.com/ja-jp/library/ms187926(v=SQL.90).aspx]
::[PRINT|http://msdn.microsoft.com/ja-jp/library/ms176047(v=SQL.90).aspx]]
 create procedure pr_Names @VarPrice money
     as 
         begin
             -- ユーザー定義メッセージをクライアントに返す
             print 'Product less than ' + cast(@VarPrice as varchar(10));
             -- 実際に行いたい処理
             select ProductName, Price from vw_Names
                 where Price < @varPrice;
         end
 go
!テスト
::[EXECUTE|http://msdn.microsoft.com/ja-jp/library/ms188332(v=SQL.90).aspx]
 execute pr_Names 100.00;
 go
!結果
{{ref_image sqlsvr_sample08.jpg}}
*print ステートメントの内容が出力される
{{ref_image sqlsvr_sample09.jpg}}

!!データベース オブジェクトへのアクセス権の付与
*管理者は、上記で作成したビューとストアドプロシージャにアクセスできるが、追加したユーザーはアクセスできない
*必要な権限を付与するには、[GRANT|http://msdn.microsoft.com/ja-jp/library/ms187965(v=SQL.90).aspx] ステートメントを使用
!ストアドプロシージャへのアクセス権を付与
::[GRANT|http://msdn.microsoft.com/ja-jp/library/ms187965(v=SQL.90).aspx]
 grant execute on pr_Names to Yagi;
 go

!テーブルへのSELECT権限を付与
::[GRANT|http://msdn.microsoft.com/ja-jp/library/ms187965(v=SQL.90).aspx]
 grant select on dbo.Products to Yagi;
 go
!!データベース オブジェクトの削除
!ストアド プロシージャに対する実行権限を削除
::[REVOKE|http://msdn.microsoft.com/ja-jp/library/ms187728(v=SQL.90).aspx]
 revoke execute on pr_Names from Yagi;
 go
!テーブルのSELECT権限を削除
::[REVOKE|http://msdn.microsoft.com/ja-jp/library/ms187728(v=SQL.90).aspx]
 revoke select on dbo.Products from Yagi;
 go
!データベースに対するアクセス権を削除
::[DROP USER|http://msdn.microsoft.com/ja-jp/library/ms189438(v=SQL.90).aspx]
 drop user Yagi;
 go
!インスタンスに対するアクセス権を削除
::[DROP LOGIN|http://msdn.microsoft.com/ja-jp/library/ms188012(v=SQL.90).aspx]
 drop login [ComputerName\Yagi];
 go