- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!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