SQL Server共通ストレージ・プロシージャ

17085 ワード

ページ:
/*      */ 

CREATE PROCEDURE [dbo].[GetRecordSet] 

@strSql varchar(8000),--  sql, select * from [user] 

@PageIndex int,--      

@PageSize int--       

AS 

set nocount on 

declare @p1 int 

declare @currentPage int 

set @currentPage = 0 

declare @RowCount int 

set @RowCount = 0 

declare @PageCount int 

set @PageCount = 0 

exec sp_cursoropen @p1 output,@strSql,@scrollopt=1,@ccopt=1,@rowcount=@rowCount output --       

select @PageCount=ceiling(1.0*@rowCount/@pagesize) --      

,@currentPage=(@PageIndex-1)*@PageSize+1 

select @RowCount,@PageCount 

exec sp_cursorfetch @p1,16,@currentPage,@PageSize 

exec sp_cursorclose @p1 

set nocount off 

GO 


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
ユーザー登録:
/* 

    ,       

*/ 

Create proc [dbo].[UserAdd] 

( 

@loginID nvarchar(50),     --     

@password nvarchar(50), --   

@email nvarchar(200) --     

) 

as 

declare @userID int --     

--          

if exists(select loginID from tableName where loginID = @loginID) 

begin 

return -1; 

end 

--        

else if exists(select email from tableName where email = @email) 

begin 

return -2; 

end 

--     

else 

begin 

select @userID = isnull(max(userID),100000)+1 from tableName 

insert into tableName 

(userID,loginID,[password],userName,linkNum,address,email,createTime,status) 

values 

(@userID,@loginID,@password,'','','',@email,getdate(),1) 

return @userID 

end 


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
SQL Serverシステムストレージプロセス
1.表のフィールドに説明情報を追加する
Create table T2 (id int , name char (20)) 

GO 

EXEC sp_addextendedproperty 'MS_Description', 'Employee ID', 'user', dbo, 'table', T2, 'column', id 

EXEC sp_updateextendedproperty 'MS_Description', 'this is a test', 'user', dbo, 'table', T2, 'column', id 


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
2.データベース名の変更
EXEC sp_renamedb 'old_db_name', 'new_db_name' 


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
3.データテーブル名とフィールド名の変更
EXEC sp_rename 'old_table_name', 'new_table_name'EXEC sp_rename 'table_name.[old_column_name]', 'new_column_name', 'COLUMN'

<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
4.ストアド・プロシージャ名を指定し、ストアド・プロシージャの内容を取得する
exec sp_helptext sp_name


<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->
次に、データベース制御について説明します.
*以下は、セキュリティ管理に関するシステム・ストレージ・プロシージャまたはSQL文です.詳細な構文は、「オンライン・叢書」に関する内容を参照してください*/–新しいSQL Serverログインを作成し、ユーザーがSQL Server認証を使用するSQL Serverに接続できるようにします.EXEC sp_addlogin@loginame=',@passwd=',@defdb=',@deflanguage=NULL,@sid=NULL,@encryptopt=NULL–Windows NTユーザーまたはグループアカウントがWindows認証を使用してSQLサーバに接続できるようにします.EXEC sp_grantlogin@loginame='–SQLサーバーのログインを削除し、このログイン名を使用してSQLサーバーにアクセスできません.EXEC sp_droplogin@loginame='–Windows NTユーザーまたはグループがSQLサーバに接続されないようにします.EXEC sp_denylogin@loginame='–SQL Serverから削除用sp_grantloginまたはsp_denyloginが作成したWindows NTユーザーまたはグループのログイン項目.EXEC sp_revokelogin@loginame='–ログインのデフォルトデータベースを変更します.EXEC sp_defaultdb@loginame=',@defdb='–ログインのデフォルト言語を変更します.EXEC sp_defaultlanguage@loginame=',@language='–SQL Serverログインパスワードを追加または変更します.EXEC sp_password@old=',@new=',@loginame='–サーバロールの新しいメンバーを追加します.EXEC sp_addsrvrolemember@loginame=',@rolename='–サーバロールのメンバーを追加します.EXEC sp_dropsrvroleember@loginame=',@rolename='–SQL ServerログインまたはWindows NTユーザーまたはグループの現在のデータベースにセキュリティアカウントを追加し、データベースでアクティビティを実行する権限(デフォルトのpublicデータベースロールを付与)を付与できます.EXEC sp_grantdbaccess @loginame = '', @name_in_db=NULL–またはEXEC sp_adduser @loginame = '', @name_in_db=NULL,@grpname='–現在のデータベースからセキュリティアカウントを削除します.EXEC sp_revokedbaccess @name_in_db='–またはEXEC sp_dropuser @name_in_db='–現在のデータベースに新しいデータベースロールを作成します.EXEC sp_addrole@rolename=',@ownername='–現在のデータベースでデータベースロールを削除します.EXEC sp_droprole@rolename='–現在のデータベースにデータベースロールの新しいメンバーを追加します.EXEC sp_addrolemember@rolename=',@membername='–現在のデータベースでデータベースロールのメンバーを削除します.EXEC sp_droproleember@rolename=',@membername='–データベースロール、テーブル、ストレージ・プロシージャなどのオブジェクトへの権限割り当て–1、GRANTへのアクセス許可–2、DENYへのアクセス拒否–3、REVOKEの取り消しまたは拒否–4、Sample(pubs):GRANT SELECT ON authors TO Limperator DENY SELECT ON authors TO Limperator REVOKE SELECT ON authors TO Limperator
 
データベース・リストアのストアド・プロシージャ
SQL code 

create proc killspid (@dbname varchar(20)) 

as 

begin 

declare @sql nvarchar(500) 

declare @spid int 

set @sql='declare getspid cursor for 

select spid 

from sysprocesses 

where dbid=db_id('''+@dbname+''')' 

exec (@sql) 

open getspid 

fetch next from getspid 

into @spid 

while @@fetch_status <>-1 

begin 

exec('kill '+@spid) 

fetch next from getspid 

into @spid 

end 

close getspid 

deallocate getspid 

end 

GO 


役割:データベースに転送されたアクティビティを殺してバックアップ・リストアなどの排他的な操作を行う
 
==================================================================================
SQL code 

CREATE FUNCTION fun_cgnum 

(@num INT) 

RETURNS VARCHAR(100) 

AS 

BEGIN 

DECLARE @temp INT,@res INT,@i TINYINT 

DECLARE @str VARCHAR(100),@no VARCHAR(20),@unit VARCHAR(16) 

SELECT @str='',@no='          ',@unit='        ' 

SET @temp=@num 

SELECT @i=0,@res=@temp%10,@temp=@temp/10 

WHILE @temp>0 

BEGIN 

IF @i=0 

SET @str=SUBSTRING(@no,@res+1,1) 

ELSE 

SET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str 

SELECT @res=@temp%10,@temp=@temp/10 

SET @i=@i+1 

END 

SET @str=SUBSTRING(@no,@res+1,1)+SUBSTRING(@unit,@i,1)+@str 

SET @str=REPLACE(@str,'  ',' ') 

SET @str=REPLACE(@str,'  ',' ') 

SET @str=REPLACE(@str,'  ',' ') 

SET @str=REPLACE(@str,'  ',' ') 

SET @str=REPLACE(@str,'  ',' ') 

WHILE @i>0 

BEGIN 

SET @str=REPLACE(@str,'  ',' ') 

SET @i=CHARINDEX('  ',@str) 

END 

SET @str=REPLACE(@str,'  ',' ') 

SET @str=REPLACE(@str,'  ',' ') 

IF RIGHT(@str,1)=' ' 

SET @str=LEFT(@str,LEN(@str)-1) 

RETURN @str 

END 

GO 


--テスト:0と0がない場合SELECT dbo.fun_cgnum(900000000),dbo.fun_cgnum(903002051),dbo.fun_cgnum(903002050)PS:興味のある方は小数点や単位(元/角/分)を追加する場合を引き続き考慮してください
 
<!--
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
-->