!!!Transact-SQL 基本 *http://msdn.microsoft.com/ja-jp/library/ms365303(v=SQL.90).aspx [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