SQL Server2012

目次

交換

データベースを作成する

テーブルを作成する

テーブルを変更する

テーブルの削除

テーブルに対して粗雑な操作を実行する

文字列関数

数学関数

日付関数

集計関数

複数テーブルのクエリ

変数

キャスト関数

意見

索引

ストアドプロシージャ

引き金

データベースユーザー


交換

replace(文字列, 置換された文字, 置換された文字)

例えば:

select replace(replace(replace('2012年5月18日','年','-'),'日',' '),'月','-');

データベースを作成する


プライマリにデータベース question1 を作成します
( 
  name='question1_data'、
  filename='C:\temp\question1_data.mdf'、
  size=5MB、
  maxsize=10MB、
  filegrowth=10% 
)
ログオン
( 
   name='question1_log'、
   filename=') C:\temp\question1_log.ldf'、
   サイズ=5MB、
   最大サイズ=10MB、
   ファイル増加率=15% 
)

テーブルを作成する

use question1;
テーブル
を作成します
CityCode Char(4) 主キー, //主键
CityName Varchar(80) not null //非空
)
テーブル
を作成します
PubCode Char(4) 主キー, 
PubName Char(5) ではありませんnull、
Phone Char(15)、
Address Varchar(100)、
CityCode Char(4)
外部キー参照 city(CityCode) //外键
)

テーブルを変更する

use question1; 
//
列を追加
alter table Publishers 
add comment Varchar(100) 
//
列の長さを変更
alter table Publishers 
alter column comment Varchar(120) 
//
列コメントを削除
alter table Publishers 
drop column comment

テーブルの削除

//まず外部キーを
持つテーブルを削除します。drop tablepublisheds; 
drop table city;

テーブルに対して粗雑な操作を実行する


categoryID=1 のタイトルからの価格としての価格
// デフォルトで昇順に並べる
select * from title where year(PubDate)>=2009 and YEAR(PubDate)<=2010 order by PubDate //
ファジー
クエリ、出版名に「database」が含まれるexamDB データベースのタイトル テーブル内の出版物レコードをクエリします
select * from title where TitleName like '%database%' 
//
ファジー クエリ。examDB データベースのタイトル テーブルをクエリします。発行者コードの 2 番目の位置は「X」です。出版物名、著者および発行者コード
select TitleName,Author, '_X__' のような PubCode が含まれるタイトルからの PubCode 
//
クエリで算術演算子が使用されます: 出版物名、価格、および ExamDB データベースのタイトル テーブルの 15% 割引後の価格をクエリします。 select TitleName 書籍タイトル、価格正規価格
、価格が 35 を超えるタイトルからの「85% オフ」として価格 * 0.85

文字列関数

print len('HI - hello!') -- return 6 
print
datalength('123A Hello!') -- return 10 
print
datalength(N'123A Hello!') -- return 16 unicode数値と文字が占有します2 バイト
3.upper
() -- 小文字から大文字
4. lower
() -- 大文字から小文字
5.ltrim
() は左端のスペースを削除し、rtrim() は右端のスペースを削除します
6. left
( 'NIHAOYAP,2') 左から 2 文字をインターセプト
7.right
('NIAH',2) 右から 2 文字をインターセプト
8.substring
('nihaooo',1,2) -- から 2 文字をインターセプト位置 1 文字、結果は ni で、
 添え字は 1 から始まります。
  print substring('nihaooo',-1,3) -- 結果は n を返します。次の表は -1、0 は null
//、examDB データベースのタイトル テーブルに TitleCode、最後の 3 桁、TitleCode の最後の 1 桁、出版物名、名前、長さが 7 を超える出版物名の長さを問い合わせて、それらを次のように配置します。長さの降順 // RTRIM() は末尾の
スペースを削除し、LTRIM はヘッダーのスペースを削除します。
select
TitleCode,right(RTRIM(TitleCode),3) Id1,right(RIRTM(TitleCode),1) Id2, TitleName,len(TitleName) len(TitleName)>7 のタイトルから len(TitleName) の順に並べる
desc

数学関数

--1. ABS(X) 絶対値関数; 
SELECT ABS(-2.0),ABS(2); 

--2. PE() は円周率の関数を返します; 
SELECT PI(); 

--3. SQRT(X)平方根関数; 
SELECT SQRT(9)、SQRT(11); 

--4、RAND() および RAND(X) 関数: ランダムな浮動小数点値 n (0<=n<=1.0) を返します; 
SELECT RAND( ), RAND (),RAND(); ----パラメータがない場合に生成される乱数が異なります; 
SELECT RAND(5),RAND(5),RAND(3); -- 同じ乱数が生成されますパラメータが同じ場合; 

--5. ROUND(X,Y) 関数: 切り上げてパラメータ X に最も近い値を返し、その値を小数点以下 Y 桁に保ちます。Y が負の数の場合、小数点の左から Y 桁はすべて 0; SELECT ROUND 
( 33333.333333,2),ROUND(33333.33333,-2),ROUND(33333,-2); 

--6, SIGN(X) 関数: を返します。パラメータの記号; 
SELECT SIGN(3),SIGN(0),SIGN(- 3), SIGN(3.33), SIGN(-33.33); --7, 

CEILING(X) 関数: 以上の最小の整数を返すX; 
SELECT CEILING(33.333), CEILING(33.666), CEILING(-33.333), CEILING (-33.666); 

--8. FLOOR(X) 関数: X より小さい最大の整数を返します; 
SELECT FLOOR(33.333),FLOOR (-33.333);

--9. POWER(X,Y) 関数: x の y 乗を返します; 
SELECT POWER(2,3),POWER(3,0),POWER(5,-2),POWER(5.0,-2) , POWER(5.000,-2); 

--10, SQUARE(X) 関数: x の 2 乗を返します; 
SELECT SQUARE(0), SQUARE(3), SQUARE(-3), SQUARE(3.3); 

--11 、EXP (X) 関数: e の x 乗を返します; 
SELECT EXP(3)、EXP(-3)、EXP(0)、EXP(3.3); 

--12、LOG(X) 関数: 自然対数を返します。 of x , x は 0 または負の値にはできません; 
SELECT LOG(3.3), LOG(3), LOG(4); 

--13, LOG10(X) 関数: 底が 10 である x の対数を返します (100 など)。底は 10 の対数は 2; 
SELECT LOG10(1000), LOG10(1), LOG10(5); 

--14, RADIANS(X) 関数: パラメーター x を角度からラジアンに変換します; 
SELECT RADIANS(45.0), RADIANS(45 ),RADIANS(-45.0); 

--15, DEGREES(X): 関数: パラメーター x をラジアンから角度に変換します; 
SELECT DEGREES(33),DEGREES(33.33333),DEGREES(-33.33333),DEGREES( PI() ); 
 
--16、SIN (X) 関数: x の正弦を返します、x はラジアン値です。
SELECT SIN(30),SIN(-30),SIN(PI()),SIN(PI()/2),ROUND(SIN(PI()),0);

--17. ASIN(X) 関数: x の逆正弦を返します、つまり正弦が x である値を返します; 
SELECT ASIN(1), ASIN(0), ASIN(-1); 

--18. COS( X) 関数: x のコサインを返します、x はラジアン値です; 
SELECT COS(30),COS(-30),COS(PI()),COS(1),COS(0); --19 , 

ACOS (X) 関数: x の逆余弦を返します、つまり余弦が x である値を返します; 
SELECT ACOS(1),ACOS(0),ACOS(-1),ACOS(0.3434235),ROUND(ACOS(0.3434235) ),1); --20 

、 TAN(X) 関数: x のタンジェントを返します、x はラジアン値です; 
SELECT TAN(1), TAN(0), TAN(-1); 

--21, ATAN( X) 関数: x の逆正接を返します、つまり正接が x である値を返します; 
SELECT TAN(1), ATAN(1.5574077246549), ATAN(0); -------TAN と ATAN は相互に逆関数です。

--22、COT(X) 関数: x コタンジェントの値を返します; 
SELECT COT(3),1/TAN(3),COT(-3);-------------- -----COT と TAN は相互に逆数です。
// 次の 2 つの数値以下の整数を返します: 4.5 と -7.6; 8.1 以上の整数を返します; 2 の 5 乗を返します select FLOOR(4.5), FLOOR(-7.6), 
CEILING (8.1)、パワー (2,5);

日付関数

1.Current_Timestamp: 現在のシステム時刻を返します

-- パラメータなし
-- datetime タイプを返します。
現在のシステム時刻として Current_Timestamp を選択します -- 2019-09-22 23:46:53.623 


2.Dateadd(): 指定された日付を加算または減算します。 date 時間間隔

--構文: Dateadd(datepart,number,date) 
--datepart: 整数値に加算される日付の部分
--number: 時間間隔の数 (正または負の場合があります) 
--date : date 
-- datetime 型を返します
select Dateadd(dd,3,Getdate()) -- 現在時刻に 3 日を加えた時刻を返します
select Dateadd(mm,-3,Getdate()) -- 現在時刻から 3 か月を引いた時刻を返します


3.Datediff( ) : 時間の差を返す

-- 構文 Datediff(datepart, startdate, enddate) 
--datepart: startdate と enddate の差を報告するために使用される単位
--startdate: 開始日
--enddate: 終了日
-- int 型を返す
select Datediff( dd ,'2019-07-01','2019-07-25')--return 24 
select Datediff(mm,'2019-11-01','2019-10-10')--return -1


4.Datename(): 指定された日付の指定された日付部分を表す文字列を返します

-- 構文: Datename(datepart,date) 
-- 文字列タイプを返します
select Datename(dd,getdate()) -- 現在の日付を取得します
select Datename( mm, getdate()) -- 現在の月を取得します
select Datename(yy, getdate()) -- 現在の年を取得します


5.Datepart(): 指定された日付の指定された日付部分を表す整数を返します

-- 構文: Datepart(datepart,date ) 
-- int 型を返す
select Datepart(day,getdate()) -- 現在の日を取得
select Datepart(month,getdate()) -- 現在の月を取得
select Datepart(year,getdate() )-- 現在の年を取得します。


6.Day (): 指定された日付の「日」の日付部分を表す整数を返します。

-- 構文: Day (datetime) 
-- int 型を返します。
select Day(getdate()) -- 返します。現在の日
select Day('2019-09-22' )--return 22 


7.Getdate(): 現在のシステムの日付と時刻を返します --

構文: Getdate() 
--return datetime 型
select Getdate()


8. Getutcdate(): 現在の UTC (協定世界時、世界標準時) 時刻を返します

-- 構文: Getutcdate() 
-- datetime 型を返します
。 Getutcdate() -- 北京時間から 8 時間を引いた時刻です。


9.Isdate(): OK入力式が有効な日付かどうか、true の場合は 1、false の場合は 0 を返します --

構文: Isdate(varchar) 
--return int 型
select Isdate('2019-20-01')--return 0 
select Isdate('2019 -01-01')--return 1 


10.Month(): 指定された日付の「月」部分の整数を返します --

構文: Month(datetime) 
--return: int 型
select Month(getdate()) --return 現在の月
select Month('2019-07-01')--return 7 


11.Sysdatetime(): 現在のシステム時間の datetime2(7) 値を返します --

構文: Sysdatetime() 
--return datetime2( 7) 
select Sysdatetime() 


12.Sysdatetimeoffset(): タイム ゾーン オフセットを含む現在のシステム時間の datetimeoffset(7) 値を返します

-- 構文: Sysdatetimeoffset()  
-- datetimeoffset タイプを返します
select Sysdatetimeoffset()


13.Sysutcdatetime(): 現在の UTC (世界標準時) の datetime2(7) 値を返します

--構文: Sysutcdatetime() 
--戻り値: datetime2(7) type 
select Sysutcdatetime() 


14.Switchoffset(): datetimeoffset 値 from 予約されたタイム ゾーン オフセットを新しい値に変更します

--構文: Switchoffset(datetimeoffset, timezone) 
--datetimeoffset:expression 
--Timezone: varchar 
--Return datetimeoffset 
DECLARE @dt datetimeoffset = switchoffset (CONVERT(datetimeoffset, GETDATE() ), '-04:00') 
SELECT * FROM table_name    
WHERE dt2> @dt オプション (再コンパイル) -- 再コンパイル、パフォーマンスの向上


15.Todatetimeoffset(): datetime2 式から変換された datetimeoffset 値を返します

-- 構文: Todatetimeoffset(式、タイムゾーン) 
-- datetimeoffset タイプを返します
DECLARE @todaysDateTime datetime2
SET @todaysDateTime = GETDATE()   
SELECT Todatetimeoffset (@todaysDateTime, '-07:00')


16. Year(): 指定された日付の「年」部分の整数を返します

-- 構文: Year(datetime) -- 
int 型を返します
select Year(getdate()) -- 現在の年


17.Datepart パラメーター:

//現在のシステム日付を返し、2 つの日付「2008-01-01」と「2009-01-01」の間の月数を返します。yy は年数を返します。mm は月数を返します。dd は年数を返します。日選択 GETDATE( 
),DATEDIFF(mm ,'2008-01-01','2009-01-01')

集計関数

1. COUNT 集計関数: クエリ レコード (行) の数を返します。

フォーマット:

COUNT([ALL|DISTINCT][式|*])

パラメータの説明:

ALL: デフォルト値。クエリされたすべてのレコードの統計の合計数を指します。

DISTINCT: クエリ レコードの重複排除された空でないレコードの総数を指します。

式: text、image、ntext を除く任意のタイプの式を指します。

*: クエリ レコードの合計行数を示します。

2. SUM集計機能:テーブル内の数値列のデータの合計値を計算します。

フォーマット:

SUM([ALL|DISTINCT] 式)

ALL: デフォルト値は、クエリ内のすべてのレコードの合計を指します。

DISTINCT: クエリ レコードの重複を排除し、それらを合計することを指します。

式: 定数、データ列、関数、算術演算の任意の組み合わせ。

使用法:

SELECT SUM(スコア) FROM T_Score SELECT SUM(DISTINCT スコア) FROM T_Score SELECT SUM(1+99) 3. AVG 平均関数: データ リストの平均値を返します。NULL は無視されます。

フォーマット:

AVG([ALL|DISTINCT]列名(数値型))

パラメータ: ALL: NULL ではないすべての列、DISTINCT 重複排除列を示します。

使用法:

SELECT AVG(Age) FROM T_User -- 平均年齢を計算します。 SELECT AVG(DISTINCT Age) FROM T_User -- 重複排除後の平均年齢を計算します。 4. MAX/MIN: テーブル内の任意の列のデータの最大値/最小値を検索します。 。

フォーマット:

MAX/MIN(列名)

使用法:

SELECT MAX(score) FROM T_Score SELECT MIN(score) FROM T_Score 5. COUNT_BIG 集計関数: 使用法は COUNT と似ていますが、唯一の違いは、COUNT_BIG によって返される値の型が bigint で、COUNT によって返される値の型が int であることです。

6. GROUPING 関数の機能: 列を追加します。grouping() 関数が 1 を返した場合は集計を示し、0 を返した場合は集計がないことを示します。

使用法:

SELECT GROUPING(name),T_User からの名前 GROUP BY 名前

//examDB データベースのタイトル テーブル内のすべての出版物の平均価格をクエリします
。タイトルから avg(Price) を選択し

ます。 // SELECT ステートメントで GROUP BY を使用します。新しいクエリ ウィンドウを作成し、クエリ ステートメントを入力して、統計を取得します。 ExamDB データベースの Publishers テーブル内の各出版物の数 都市内の出版社の数は、出版社の
数として count(*) を選択します。出版社の都市コードは、CityCode によってグループ化されます。 order by count(*) 

// SELECT ステートメントで HAVING を使用します ( GROUP BY と併用): 新しいクエリ ウィンドウを作成し、クエリ ステートメントを入力して、examDB データベース パブリッシャー テーブルの統計を取得します。CityCode が
count(*)>1 であることによって、パブリッシャー グループから CityCodeを選択します。

複数テーブルのクエリ

--結合クエリ
--顧客名、購入数量、購入単価、商品名をクエリ --
 
方法1:内部結合:内部結合 構文:テーブル名1の内部結合テーブル名から列名1、列名2…を選択2 on (外部キー テーブル.外部キー = 主キー テーブル.主キー) 
--顧客名、購入数量、購入単価、製品名を
クエリします。 sales 内部結合から clientName、productNumber、salePrice、productName を選択します。 product on(sales.productId =product.productId ) 
--顧客名、製品名、製品価格を
クエリ select clientName, productName,price from sales s inner join product p on(s.productId=p.productId) --
方法 2: 等価性を通じて内部接続クエリを実現します接続: select カラム名 1, カラム名 2... from テーブル名 1, テーブル名 2 where 外部キー table. 外部キー = 主キー table. 主キー select clientName, productName,price from 
sales s, product p where s. productId=p.productId 
 
-- 単一販売数量 > 20 の製品名、販売単価、販売数量をクエリします。
select productName, salePrice, productNumber from product inner join sales on(product.productId=sales.productId) where productNumber>20
select productName, salePrice, productNumber from product, sales where product.productId=sales.productId and productNumber>20 
 
--empdb 
use empdb 
select * from dept 
select * from emp 
--query 従業員名、性別、住所、部門名、部門番号
select empName,empSex,empAddress,deptName,deptNum from emp inner join dept on(emp.deptId=dept.deptId) 
-- 名前が「Kaige」と表示される従業員の名前、性別、住所、部門名、部門番号をクエリ
select empName 、empSex,empAddress,deptName,deptNum from emp inner join dept on(emp.deptId=dept.deptId) where empName like '%Kaige%' 
select empName,empSex,empAddress,deptName,deptNum from emp,dept where emp.deptId= dept .deptId と empName は '%Kaige%' のようになります

// 1 つの SELECT ステートメントで複数のテーブルを使用する (内部結合): 新しいクエリ ウィンドウを作成し、クエリ ステートメントを入力して、examDB データベース内の各都市の発行者名 (publishers テーブル内) (city テーブル内の CityName) をクエリします。 select CityName 
, pubName from city inner join Publishers on(city.CityCode=publishers.CityCode) 

// SELECT ステートメントでサブクエリを使用します。新しいクエリ ウィンドウを作成し、クエリ ステートメントを入力して、出版物名、著者、名前をクエリします。 ExamDB データベースの出版者テーブルで最高価格の出版物 出版日
select TitleName,Author,PubDate from Titles where Price=(select max(Price) from Titles) 

//UNION 演算子を使用した操作の設定: 新しいクエリ ウィンドウを作成します。クエリ ステートメントを入力し、examDB データベースの出版者テーブルの CityCode をクエリします。「AGZ」です。出版情報: PubCode、PubName、Phone、CityCode のレコード セットと、CityCode が「HBJ」である出版社情報を含みます。 PubCode、PubName、Phone、CityCode のレコード セット、ユニオン操作を実行します。
CityCode='AGZ' のパブリッシャーから
PubCode 
,PubName 、Phone,CityCode を選択します。 CityCode='HBJ' のパブリッシャーから PubCode,PubName,Phone,CityCode を選択します。

変数

ローカル変数

「@」で始まる識別子は変数 (ローカル変数) を表し、使用する前に DECLARE コマンドで宣言する必要があります。

@js_age int を宣言します。
DECLARE @name varchar(32), @address varchar(64);

DECLARE コマンドを使用してローカル変数を作成した後、初期値は NULL になります。SELECT または SET を使用してこのローカル変数の値を命令できます。例 1: 宣言、代入、出力:

DECLARE @js_age INT 
SELECT @js_age = 28 
SELECT @js_age AS 年龄
GO

例 2: クエリ ステートメントを使用して変数に値を割り当てる:

DECLARE @js_rows INT 
SET @js_rows = (SELECT COUNT(*) FROM PERSON)
SELECT @js_rows as 行数
GO

例 3: SET によって割り当てられたローカル変数を使用したクエリ:

USE test 
GO 
DECLARE @js_address VARCHAR(64) 
SET @js_address = 'AAAAA' 
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, @js_address AS ADDRESS 
FROM PERSON 
GO

グローバル変数

SQL Server では、グローバル変数は、その値がサーバーによって維持される特殊なタイプの変数です。グローバル変数は @@ プレフィックスで始まり、システムによって定義された関数に属するため、宣言する必要はありません。

@@CONNECTIONS は、

SQL Server が最後に起動されてから試行した接続の数を返します。

@@CPU_BUSY は、

SQL Server が最後に起動されてからの稼働時間を返します。

@@CURSOR_ROWS は、

接続上で開かれた最後のカーソル内の現在適格な行の数を返し、

呼び出し時に取得されたカーソルに適格な行の数を決定します。

@@DATEFIRST

セッションに対して、指定された

週の最初の曜日を表す SET DATEFIRST の現在の値を返します。

@@DBTS は、

現在のデータベースの現在のタイムスタンプ データ型の値を返します。

これはデータベース内で一意である必要があります。

@@ERROR

最後に実行された Transact-SQL ステートメントのエラー番号を返します。

前の Transact-SQL ステートメントがエラーなしで実行された場合は 0 を返します。

@@FETCH_STATUS は、

接続上で現在開いているカーソルに対して発行された

最後のカーソル FETCH ステートメントのステータスを返します。

@@IDENTITY は、

最後に挿入された ID 値を返します。

@@IDLE 

SQL Server が最後に起動されてからアイドル状態になった時間を返します。結果は CPU 時間

、つまり「クロック サイクル」の増分で表され、すべての CPU にわたって累積されます。

@@IO_BUSY


SQL Server が最後に起動されてから Microsoft SQL Server が入出力操作の実行に費やした
時間を返します。結果は CPU 時間の増分

(クロック サイクル) であり、すべての CPU にわたって累積されます。 

@@LANGID は、

現在使用されている言語のローカル言語識別子 (ID) を返します。

@@LANGUAGE

現在使用している言語の名前を返します。

@@LOCK_TIMEOUT:

現在のセッションの現在のロック タイムアウト設定 (ミリ秒単位) を返します。

@@MAX_CONNECTIONS 

SQL Server のインスタンスで許可される同時ユーザー接続の最大数を返します。

返される値は、必ずしも現在構成されている値であるとは限りません。

@@MAX_PRECISION

サーバーの現在の設定に従って、10 進数および数値データ型

に使用される精度レベルを返します。

@@NESTLEVEL は、

ローカル サーバー上で実行されている現在のストアド プロシージャのネスト レベルを返します (初期値は 0)。

@@OPTIONS は、

現在の SET オプションに関する情報を返します。

@@PACK_RECEIVED は、

SQL Server が最後に起動されてからネットワークから読み取った入力パケットの数を返します。

@@PACK_SENT は、

SQL Server が最後に起動されてからネットワークに書き込んだ出力パケットの数を返します。

@@パケットエラー

SQL Server が最後に起動されてから SQL Server 接続で発生した

ネットワーク パケット エラーの数を返します。

@@PROCID は、

現在の Transact-SQL モジュールのオブジェクト識別子 (ID) を返します。Transact-SQL

モジュールは、ストアド プロシージャ、ユーザー定義関数、またはトリガーにすることができます。

@@REMSERVER は、

ログイン レコードに表示されるリモート SQL Server データベース サーバーの名前を返します。

@@ROWCOUNT は、

前のステートメントの影響を受けた行数を返します。

@@SERVERNAME は、

SQL Server を実行しているローカル サーバーの名前を返します。

@@SERVICENAME は、

SQL Server が実行されているレジストリ キーの名前を返します。現在のインスタンスがデフォルトのインスタンスの場合、

@@SERVICENAME は MSSQLSERVER を返します。

@@SPID は、

現在のユーザー プロセスのセッション ID を返します。

@@TEXTSIZE は、

SET ステートメントの TEXTSIZE オプションの現在の値を返します。

@@TIMETICKS は、

クロック ティックごとのマイクロ秒数を返します。

@@TOTAL_ERRORS は、

SQL Server が最後に起動されてから発生したディスク書き込みエラーの数を返します。

@@TOTAL_READ は、

SQL Server が最後に起動されてから (読み取りキャッシュからではなく) ディスクから読み取られた回数を返します。

@@TOTAL_WRITE

SQL Server が最後に起動されてから実行したディスク書き込みの数を返します。

@@TRANCOUNT は、

現在の接続でアクティブなトランザクションの数を返します。

@@VERSION は、

現在の SQL Server インストールのバージョン、プロセッサ アーキテクチャ、ビルド日、

およびオペレーティング システムを返します。

印刷する

print を使用して数値と文字列を一緒に出力する

同じ行に出力したい場合は、出力の型を一致させる必要があります。つまり、出力文字列と数値の型を一致させる必要があります。明らかに、数値を文字列に変換する方が簡単です。print @p+convert(varchar,@q)を使用できます。ここで、@p は文字列型、@q は数値型です

DECLARE @vname Char(10); 
DECLARE @vnum int; 

set @vname = 'Zhang San'; 
set @vnum = 12; 

print 'ローカル変数:' + '@vname:'+@vname+'@vnum:'+convert (varchar,@vnum) 

print 'グローバル変数:' + '@@Language (現在の言語の名前):'+ @@Language;

キャスト関数

組み込み関数

構文: 
 
CAST (expression AS data_type)
 
パラメータの説明:
 
式: 任意の有効な SQServer 式。
 
AS: AS が処理対象のデータである前、AS が変換対象のデータ型である後の 2 つのパラメータを区切るために使用されます。
 
data_type: ターゲット システムによって提供されるデータ型 (bigint や sql_variant など) では、ユーザー定義のデータ型を使用できません。
注: 
 
(1). CAST() 関数のパラメータは式であり、AS キーワードで区切られたソース値とターゲット データ型が含まれます。次の例は、テキスト文字列 '12' を整数に変換するために使用されます: 
 
SELECT CAST('12' AS int) 
 
(2)。戻り値は整数値 12 です。小数を表す文字列を整数値に変換しようとするとどうなるでしょうか? 
 
SELECT CAST('12.5'​​ AS int) 
 
(3). CAST() 関数も CONVERT() 関数も、丸め演算や切り捨て演算を実行できません。12.5 は int データ型で表すことができないため、この関数を呼び出すとエラーが生成されます:
 
サーバー: メッセージ 245、レベル 16、状態 1、行 1 
 
varchar 値
 
    '12.5'​​ をデータ型 int の列に変換する構文エラー. 
 
(4). 正当な値を返すには、この値を処理できるデータ型を使用する必要があります。この例では、いくつかのデータ型が利用可能です。CAST() 関数を通じて値を 10 進数型に変換する場合は、最初に 10 進数の値の精度と位取りを定義する必要があります。この例では、精度とスケールはそれぞれ 9 と 2 です。精度は、小数点の左右の桁の合計を含む合計桁数です。また、小数点以下の桁数とは、小数点以下の桁数のことです。これは、この例でサポートされる最大の整数値は 9999999 であり、最小の小数値は 0.01 であることを意味します。
 
SELECT CAST('12.5'​​ AS decmal(9,2)) 
 
10 進データ型では、結果グリッドに有効な小数点以下の桁が表示されます: 12.50
 
(5). 精度と小数点以下の桁数のデフォルト値はそれぞれ 18 と 0 です。これら 2 つの値が 10 進数型で指定されていない場合、SQL Server はエラーを生成せずに数値の小数部分を切り捨てます。
 
SELECT CAST('12.5'​​ AS 10 進数) の
 
    結果は整数値 12 になります。
select Output ステートメントを使用して、CAST 関数を使用して文字に変換された出版物コードの値とそれに対応する価格を出力します

意見

CREATE VIEW <ビュー名> [(<列名>[,<列名>]...)] 
AS <サブクエリ> 
[WITH CHECK OPTION] 

//ビュー
削除 ビュー ビュー名


知らせ:

SQL Server がビューを作成しているときに、「create view はバッチ内の唯一のステートメントである必要があります」という構文エラー プロンプトが表示されます。実際、これ自体には何も問題はありません。create view はバッチ内の最初のステートメントである必要があるためです。バッチ。つまり、このコードの前に同時に処理される他のステートメントがある可能性があるため、このコードの前の行に GO を追加し、このコードの終了後の行に GO を追加できます。または、このコードを単独で実行してもエラーは発生しません。

--examDB データベースのタイトル テーブルに view1 という名前のビューを作成し、2010 年以降に発行された出版物の TitleName、Author、Price、および PubDate をクエリします。
-- 作成が成功したら、ビューを保存し、SELECT ステートメントを使用してビューに含まれる列を表示します。 use 

ExamDB; 
go   
create view view1 
as 
select TitleName,Author,Price,PubDate from Titles 
where year(PubDate)>2010 
go 
select * from view1;
複雑なビューの作成: 新しいクエリ ウィンドウを作成し、Transact-SQL ステートメントを入力し、examDB データベースに view2 という名前のビューを作成します。このビューは、カテゴリ ID (カテゴリ テーブル) とカテゴリ名によるさまざまな出版物 (タイトルコード) のグループ統計を実装します。 (カテゴリ表) )数量。

ExamDB を使用;
ビュー view2 を作成して
category.CategoryIDを「カテゴリ ID」
として
選択し、category.CategoryName 'カテゴリ名'、カテゴリからの数量 (TitleCode) をカテゴリの左外側結合タイトル category.CategoryID=titles.CategoryID でグループ化します。CategoryID ,category.CategoryName 
go 
select * from view2
注: ID と名前は 1 対 1 で対応するため、最後のグループごとに カテゴリ ID とカテゴリ名の両方が必要です。

索引

//インデックスの作成
テーブル名(フィールド)のインデックス作成 インデックス名

//インデックスの
削除 インデックステーブル名.index
テーブルの pubdate フィールドに newidx という名前のインデックスを作成します
title(Pubdate) にインデックス newidx を作成します

ストアドプロシージャ

create proc ストアド プロシージャ名 @input パラメータ データ型, @output パラメータ データ型 出力
として
begin
	ストアド プロシージャ本体
end; 

// ストアド プロシージャ
EXEC を呼び出します <プロシージャ名> <入力パラメータ値> [,<入力パラメータ値>].. .
//ストアド プロシージャは、city テーブルの cityName が「Beijing」であることを認識し、その都市の pubName と Address が Publishers テーブルでクエリされます。つまり、都市名が「Beijing」である出版社の名前と住所です。 create proc sproc1 

as 
begin 
select 
  pubName ,Address from Publishers inner join city on city.CityCode=publishers.CityCode where city.CityName='Beijing' 

end; 

exec sproc1;
// sproc2 という名前の新しいストアド プロシージャをexamDB データベースに作成します。ストアド プロシージャには、cityName の入力パラメータが含まれています。このストアド プロシージャは、異なる cityName が city テーブルで指定され、都市の pubName と Address が Publishers テーブルでクエリされることを認識します。


ExamDB を使用; 
go 
create proc sproc2 @cname varchar(80) 
as 
begin 
  select pubName,Address from Publishers inner join city on Publishers.CityCode =city.CityCode where city.CityName = @cname 

end 

exec sproc2 'Beijing'
ExamDB データベースに sproc3 という名前の新しいストアド プロシージャを作成します。ストアド プロシージャには、入力パラメータと出力パラメータが含まれます。入力パラメータは TitleCode を示し、出力パラメータは Price を示します。ストアド プロシージャは、さまざまな出版コードに応じて対応する価格を見つけるために、タイトル テーブルに実装されています。

use ExamDB; 
go 

create proc sproc3 @tc char(6) , @pmoney 出力
として
begin 
select @p=Price from タイトル where TitleCode=@tc 
end 
go
宣言 @pmoney 
exec sproc3 'T002',@p Output; 
use ExamDB ; 
go 

create proc sproc3 @tc char(6) , @pmoney 出力
として
begin 
select @p=Price from タイトル where TitleCode=@tc 
end 
go
宣言 @pmoney 
exec sproc3 'T002', @p Output 
print 'T002 の価格は' + Convert(varchar,@p);

注: 
exec sproc3 'T002',@p 出力
print 'T002'sprice is' + Convert(varchar,@p)
の間に
セミコロンを追加しないでください

引き金

テーブル名にトリガー トリガー名を作成 (後、前) (挿入、削除、更新) 
as 
begin 
	if 条件: update(PubDate) 
	begin 
		content 
	end; 
end;

//examDB データベース内に newtrigger という名前のトリガーを作成します。トリガーでは、titles テーブルの PubDate 列のデータが変更されたときに、「出版日が変更されました。トリガーは機能しました。」というテキストが表示されるように規定しています。トリガーをトリガーするには、titles テーブルの PubDate 列データを変更します

useexamDB; 
go 
create Trigger newtrigger on Titles after update 
as 
begin 
  if update(PubDate) 
  begin 
      print '出版日が変更されたため、トリガーは機能します' 
  end 
end;

タイトルを更新しますset PubDate='2011-06-02' where TitleCode='T001'

データベースユーザー

データベース ログイン アカウントの作成
exec sp_addLogin アカウント名 アカウント パスワード

データベース ユーザーの作成
exec sp_grantDBaccess ログイン アカウント ユーザー名

データベース ユーザーのユーザー名に対するテーブル名の付与 (選択、更新、削除など) を承認します。

データベース ログイン アカウントを作成する: 新しいクエリ ウィンドウを作成し、Transact-SQL ステートメントを入力し、システム ストアド プロシージャ sp_addLogin を使用して SQL Server ID を持つログイン アカウントを作成します。ログイン名は Login1、パスワードは 123456 exec sp_addLogin です。ログイン1','123456 

'
データベース ユーザーの作成: 新しいクエリ ウィンドウを作成し、データベース ExamDB を選択し、Transact-SQL ステートメントを入力し、システム ストアド プロシージャ sp_grantdDBaccess を使用してデータベースにデータベース ユーザー dbUser1 を作成します (デフォルトのログイン名は Login1 ですが、これも可能です)異なるものにしてください) exec sp_grantdDBaccess 'Login1',' 

dbUser1 '
データベース ユーザー dbUser1 にパブリッシャー テーブルに対するオブジェクトの選択および更新権限を付与し

、パブリッシャーに対する選択と更新を dbUser1 に付与します。

おすすめ

転載: blog.csdn.net/weixin_53630942/article/details/125024242