>  기사  >  백엔드 개발  >  클래식 SQL 문 전체 모음

클래식 SQL 문 전체 모음

WBOY
WBOY원래의
2016-08-08 09:28:581164검색

1. 기본

1, 설명: 데이터베이스 생성
CREATE DATABASE 데이터베이스 이름
2, 설명 : 데이터베이스 삭제
데이터베이스 dbname 삭제
3, 설명: 백업 sql server
--- 백업 데이터 생성 장치
마스터 사용
EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'
- -- 백업 시작

BACKUP DATABASE pubs TO testBack
4, 설명: 새 테이블 생성
테이블 생성 tabname(col1 type1 [null 아님] [기본 키],col2 type2 [null 아님],..)

기존 테이블을 기반으로 새 테이블 만들기:
A: tab_old와 같이 tab_new 테이블 만들기(기존 테이블을 사용하여 새 테이블 만들기)
B: tab_old 정의에서만 col1,col2…를 선택하여 tab_new 테이블을 생성합니다
5, 설명: 새 테이블 삭제
테이블 탭 이름 삭제
6, 설명: 열 추가
테이블 탭 이름 변경 열 열 추가 type
참고: 열은 추가된 후에 삭제할 수 없습니다. DB2에서는 컬럼을 추가한 후에는 데이터 유형을 변경할 수 없다. 변경할 수 있는 유일한 것은 varchar 유형의 길이를 늘리는 것이다.
7. 지침: 기본 키 추가: 테이블 탭 이름 변경 기본 키 추가(col)
지침: 기본 키 삭제: 테이블 탭 이름 변경 기본 키 삭제 (col )

8. 설명: 인덱스 생성: tabname(col….)에 [고유한] 인덱스 idxname 생성
인덱스 삭제: index idxname 삭제

참고: 색인은 변경할 수 없습니다. 변경하려면 삭제하고 다시 작성해야 합니다.
9, 설명: 뷰 생성: select 문으로 뷰 뷰 이름 생성
뷰 삭제: drop view viewname
10, 설명: 몇 가지 간단한 기본 SQL 문
선택: select * from table1 where 범위
삽입: table1(field1,field2)에 값(value1,value2)을 삽입
삭제: table1에서 삭제, 범위

업데이트 :update table1 set field1=value1 where Range
찾기: select * from table1 where field1 like '%value1%' ---like구문이 매우 정교합니다. 정보를 확인하세요!
정렬: select * from table1 order by field1,field2 [desc]
합계:
table1에서 totalcount로 count 선택
Sum:
table1에서 sumvalue로 sum(field1) 선택
Average:
avg(field1) 선택 테이블1의 평균값
최대값:
테이블1의 최대값으로 max(field1) 선택
최소값:
테이블1의 최소값으로 min(field1) 선택
11, 설명: 여러 고급 쿼리 연산자
A: UNION 연산자
UNION 연산자는 두 개의 다른 결과 테이블(예: TABLE1 및 TABLE2)을 결합하고 테이블에서 중복 행을 제거하여 결과 테이블을 파생합니다. ALL을 UNION(즉, UNION ALL)과 함께 사용하면 중복 행이 제거되지 않습니다. 두 경우 모두 파생 테이블의 각 행은 TABLE1 또는 TABLE2
에서 나옵니다.
B: EXCEPT 연산자
EXCEPT 연산자 파생 TABLE1에는 있지만 TABLE2에는 없는 모든 행을 포함하고 중복 행을 제거하여 결과 테이블을 만듭니다. ALL을 EXCEPT(EXCEPT ALL)와 함께 사용하면 중복 행이 제거되지 않습니다.
C: INTERSECT 연산자
INTERSECT 연산자는 TABLE1과 TABLE2 모두에 존재하는 행만 포함하여 병합합니다. 모든 중복 행을 제거하여 결과 테이블을 만듭니다. ALL 을 INTERSECT(INTERSECT ALL)와 함께 사용하면 중복 행이 제거되지 않습니다.
참고: 연산자 단어를 사용하는 여러 쿼리 결과 줄은 일관성이 있어야 합니다.
12
, 설명: 외부 조인 사용
A, 왼쪽(외부) 조인:
왼쪽
외부 조인(왼쪽 조인): 결과 집합에는 조인 테이블의 일치하는 행과 왼쪽 조인 테이블의 모든 행이 포함됩니다.
SQL: LEFT OUT JOIN에서 a.a, a.b, a.c, b.c, b.d, b.f를 선택합니다. b ON a.a = b.c
B: 오른쪽(외부) 조인:
오른쪽 외부 조인(오른쪽 조인): 결과 집합에는 조인 테이블의 일치하는 조인 행과 오른쪽 조인 테이블의 모든 행이 모두 포함됩니다.
C: 전체/교차(외부) 조인:
완전 외부 조인: 심볼릭 링크 테이블의 일치하는 행뿐만 아니라 조인된 두 테이블의 모든 레코드도 포함됩니다.
12, 그룹화:그룹화 기준:
테이블, 그룹화가 완료되면 그룹 관련 항목만 가져옵니다. 정보.
그룹 관련 정보: (통계 정보) count,sum,max,min,avg 그룹 기준)
SQL Server에서 그룹화하는 경우: text, ntext 및 image 유형의 필드는 그룹화 기준으로 사용할 수 없습니다.
selecte 통계 함수의 필드는 그룹화 기준으로 사용할 수 없습니다. 일반 필드와 결합하여

13, 데이터베이스 운영:
데이터베이스 분리: sp_detach_db : sp_attach_db 뒤에는 첨부 파일에 전체 경로 이름이 필요함을 나타냅니다.
14.데이터베이스 이름 수정 방법:
sp_renamedb '이전_이름', '새_이름'

2. 개선

1, 설명: 테이블 복사(복사 구조만, 원본 테이블 이름: a 새 테이블 이름: b) (액세스 가능 )
방법 1: 1<>1인 a에서 *를 b로 선택(SQlServer에만 해당)
방법 2: 상위 0개 선택 * into b from a
2, 설명: 테이블 복사(복사 데이터, 원본 테이블 이름: 대상 테이블 이름: b) (접근 가능 )
b(a, b, c)에 삽입 b에서 d,e,f 선택;

3, 설명: 데이터베이스 간 테이블 복사본(특정 데이터에는 절대 경로 사용)(액세스 가능)
삽입 b(a, b, c) '특정 데이터베이스'의 b에서 d,e,f를 선택합니다. 여기서 조건은
예: ..from b in '"&Server. MapPath (".")&"data.mdb" &"' 여기서..

4, 설명: 하위 쿼리(테이블명 1: 테이블명 2: b)
a,b,c 선택 a에서 IN(b에서 d 선택) 또는: a에서 a,b,c 선택 여기서 IN(1,2,3)

5, 설명: 기사, 제출자 및 마지막 응답 시간 표시
테이블 a에서 a.title,a.username,b.adddate를 선택하고, (table.title=a.title인 테이블에서 max(adddate) adddate 선택) b

6, 설명: 외부 조인 쿼리(테이블명 1: 테이블명 2: b)
a.a, a.b 선택 , a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7, 설명: 온라인 보기 쿼리(테이블 이름 1: a)
select * from (SELECT a,b, c FROM a) T 여기서 t.a > 1;

8, 설명: between, between의 사용은 쿼리 데이터 범위를 제한하고 경계 값을 포함하며, not between은 포함하지 않습니다.
select * from table1 where 시간1과 시간2 사이의 시간
값1과 값2 사이에 있지 않은 테이블1에서 a,b,c를 선택하세요

9, 설명: 사용 방법
select * from table1 where a [not] in ('value1' ,'값 2','값 4','값 6')

10, 설명: 두 개의 관련 테이블, 보조 테이블에 없는 기본 테이블의 정보를 삭제합니다.
delete 존재하지 않는 table1에서( table1.field1=table2.field1인 table2에서 * 선택)

11, 설명: 4-테이블 결합 쿼리 문제:
select * from a left inner Join b on a.a=b.b right inner Join c on a.a = c.c 내부 조인 d on a.a=d.d 여기서 .....

12, 설명: 5분 전에 미리 알림 예약
SQL: datediff('분' , f 시작 시간,getdate())>5

13, 설명: 데이터베이스 페이징을 완료하기 위한 하나의 sql 문
select top 10 b.* from (select top 20 기본 키 필드 ,정렬 필드 from 테이블 이름 순서 기준: 정렬 필드 desc) a,테이블 이름 b 여기서 b.기본 키 필드 = a.기본 키 필드 정렬 기준:정렬 필드
구체적인 구현:
데이터베이스 페이징 정보:

@start int,@end int 선언

@sql nvarchar(600)

set @sql='select top'+str(@end-@start+1)+'+from T whererid not in(select top'+str(@str-1)+'Rid from T where Rid> ;-1)'

exec sp_executesql @sql


참고: Top 뒤에는 변수가 직접 올 수 없으므로 실제 응용 프로그램에서는 이것이 특수 처리를 수행하는 유일한 방법입니다. Rid는 top 뒤에 특정 필드가 있는 경우 매우 유용합니다. 이는 상위 필드를 논리적으로 인덱스하면(논리적 인덱스의 데이터가 데이터 테이블의 데이터와 불일치할 수 있으며, 쿼리 도중 인덱스에 있는 경우) 쿼리 결과 이후 실제 테이블의 불일치를 방지할 수 있기 때문입니다. 인덱스가 먼저 쿼리됩니다)

14, 설명: 처음 10개 레코드
상위 10개 선택 * table1 형식에서 범위

15, 설명: b 값이 동일한 각 데이터 그룹에 해당하는 a 가 가장 큰 레코드의 정보를 모두 선택합니다. (이와 유사한 사용법은 월간 데이터에도 사용할 수 있습니다. 포럼 순위, 월간 히트 상품 분석, 과목 점수별 순위 등 .)
테이블 이름 ta에서 a,b,c를 선택합니다. 여기서 a=(max( a) 테이블 이름 tb에서 tb.b=ta.b)

16. 설명: TableA에는 모든 행을 포함하지만 TableB와 TableC에는 포함하지 않습니다. 모든 중복 행을 제거하여 결과 테이블을 파생합니다
(에서 선택 tableA ) 제외(tableB에서 a 선택) 제외(tableC에서 a 선택)

17, 설명: 데이터 10개를 무작위로 추출
newid()별로 테이블 이름 순서에서 상위 10개 * 선택

18, 설명: 레코드 무작위 선택
newid() 선택

19, 설명: 중복 레코드 삭제
1),ID가 없는 테이블 이름에서 삭제(max(id) 선택) 테이블 이름 그룹에서 col1,col2,...)
2), 테이블 이름에서 임시로 고유한 *를 선택

테이블 이름
insert into tablename select * from temp
평가: 이 작업에는 많은 양의 데이터 이동이 포함됩니다. 대용량이지만 데이터 작업
3) 예: 외부 테이블로 데이터 가져오기, 어떤 이유로 처음에는 일부만 가져오지만 구체적인 내용을 결정하기 어렵습니다. 위치이므로 다음번에는 전체 항목만 가져오게 됩니다. 이렇게 하면 중복 필드가 많이 생성됩니다.

테이블 변경 테이블 이름--
자동 증가 열 추가
column_b 추가 int ID(1,1) 테이블 이름에서 삭제
여기서 column_b가 없음(column1,column2,...
별로 테이블 이름 그룹에서 max(column_b) 선택)테이블 테이블 이름 삭제 열 컬럼_b 변경

20, 설명: 데이터베이스의 모든 테이블 이름 나열
type='U'인 sysobjects에서 이름 선택 // U는 사용자를 나타냄

21, 설명: 테이블의 모든 열 이름 나열
id=object_id('TableName')

22

, 설명: 유형 필드별로 정렬된 유형, 공급업체 및 PC 필드를 나열합니다. Case는 select의 경우와 유사하게 다중 선택을 쉽게 구현할 수 있습니다. 유형 선택,sum('A'인 경우 케이스 벤더, pc else 0 종료),sum('C'인 경우 케이스 벤더, pc else 0 종료),sum('B'인 경우 케이스 벤더) then pc else 0 end) FROM tablename 유형별로 그룹화

결과 표시:
vender PC 유형

컴퓨터
A 1컴퓨터
A 1
CD
B 2
CD
A 2
휴대폰
B 3
휴대폰 C 3

23. 설명: 테이블 table1 초기화

TRUNCATE TABLE 테이블1

24

, 설명: 10에서 15까지의 레코드 선택select top 5 * from (select top 15 * from table order by id asc) table _alias ID 설명으로 주문
3. 스킬

1, 1=1, 1=2는 SQL 문 조합에 자주 사용됩니다

"where 1=1"은 "where 1=2"를 모두 선택하고 모두 선택하지 않음을 의미합니다.

예:
@인 경우 strWhere !''
beginset @strSQL = 'count(*)를 [' + @tblName + ']의 합계로 선택 where ' + @strWhere
end
else
begin
set @strSQL = '[' + @tblName + ']'의 합계로 개수(*) 선택'
end

로 직접 쓸 수도 있습니다.

오류! 카탈로그 항목을 찾을 수 없습니다.

set @strSQL = 'select count(*) as Total from [' + @tblName + '] 여기서 1=1
안정 '+ @strWhere 2, 데이터베이스 축소 --
인덱스 재구축 DBCC REINDEX
DBCC INDEXDEFRAG--

데이터 및 로그 축소
DBCC SHRINKDB
DBCC SHRINKFILE

3

, 데이터베이스 압축dbccshrinkdatabase(dbname)

4

, 기존 사용자 권한이 있는 새 사용자에게 데이터베이스를 이전합니다. exec sp_change_users_login 'update_one','newname','oldname'
가세요

5

, 백업 세트 확인disk='E:dvbbs.bak'에서 확인만 복원

6, 데이터베이스 복구
ALTER DATABASE [dvbbs] SET SINGLE_USER
GO
DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
이동
데이터베이스 변경 [dvbbs] 다중 사용자 설정
이동

7, 로그 지우기
SET NOCOUNT ON
DECLARE @LogicalFileName sysname,
@MaxMinutes INT,
@NewSize INT


USE tablename -- 운영할 데이터베이스 이름
SELECT @LogicalFileName = 'tablename_log', -- 로그 파일 이름
@MaxMinutes = 10, -- 로그 래핑에 허용되는 시간 제한
@NewSize = 1 --
로그 파일의 크기 (M)으로 설정하고 싶어요

설정/초기화
DECLARE @OriginalSize int
SELECT @OriginalSize = size
FROM sysfiles
WHERE name = @LogicalFileName
SELECT '원본 크기' + db_name() + ' LOG는 ' +
CONVERT(VARCHAR(30),@OriginalSize) + ' 8K 페이지 또는 ' +
CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
FROM sysfiles
WHERE name = @LogicalFileName
CREATE TABLE DummyTrans
(DummyColumn char (8000) not null)


DECLARE @Counter INT,
@StartTime DATETIME,
@TruncLog VARCHAR(255)
SELECT @StartTime = GETDATE(),
@TruncLog = '백업 로그 ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE(@LogicalFileName, @NewSize)
EXEC(@TruncLog)
-- 필요한 경우 로그를 래핑합니다.
WHILE @MaxMinutes > ()) -- 시간이 만료되지 않았습니다
AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)
AND (@OriginalSize * 8 /1024) > @NewSize
BEGIN -- 외부 루프.
SELECT @Counter = 0
WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
BEGIN -- 업데이트
INSERT DummyTrans VALUES('채우기 Log') DELETE DummyTrans
SELECT @Counter = @Counter + 1
END
EXEC (@TruncLog)
END
SELECT '최종 크기 ' + db_name() + ' LOG is ' +
CONVERT(VARCHAR(30),size) + ' 8K 페이지 또는 ' +
CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
FROM sysfiles
WHERE 이름 = @LogicalFileName
DROP TABLE DummyTrans
SET NOCOUNT OFF

8, 설명: 테이블 변경
exec sp_changeobjectowner 'tablename','dbo'

9. 모든 테이블에 변경 사항을 저장합니다.

프로세스 생성 dbo.User_ChangeObjectOwnerBatch
@OldOwner를 NVARCHAR(128)로,
@NewOwner를 NVARCHAR(128)로
AS

@Name을 NVARCHAR(128)로 선언
@Owner를 NVARCHAR(128)로 선언
@OwnerName을 NVARCHAR(128)으로 선언

curObject 커서를 선언하세요.
select 'Name' = name,
'Owner' = user_name(uid)
from sysobjects
where user_name(uid)=@OldOwner
이름순으로 주문

curObject 열기
curObject INTO @Name, @Owner
WHILE(@@FETCH_STATUS=0)
BEGIN
@Owner=@OldOwner
시작
set @OwnerName = @OldOwner + '.' + rtrim(@Name)
exec sp_changeobjectowner @OwnerName, @NewOwner
end
-- @name,@NewOwner,@OldOwner
< 선택 🎜>

curObject에서 다음 항목을 @Name, @Owner로 가져옵니다END

curObject 닫기curObject 할당 해제
GO


10, SQL SERVER에 데이터 직접 루프 쓰기
@i int 선언set @i=1
while @i<30
begin

테스트(사용자 ID) 값에 삽입(@i)
set @i=@i+1end
사례
:
에는 다음 표가 있습니다. 통과하지 못한 모든 성적을 수정해야 하며, 매번 0.1씩 증가하면 통과하게 됩니다.

이름점수

장산 80

리시 59

왕무50

송권 69

while((tb_table에서 min(점수) 선택)<60)

시작

tb_table 세트 점수 업데이트 =score*1.01

점수<60

if (tb_table에서 최소(점수) 선택)>60

휴식

그 외

계속

데이터 개발-클래식


1. 성 획순으로 정렬:
* TableName에서 CustomerName별로 정렬 Chinese_PRC_Stroke_ci_as //최소부터 최대까지

2. 데이터베이스 암호화:
select encrypt('원래 비밀번호')
select pwdencrypt('원래 비밀번호
')
select pwdcompare('원래 비밀번호','암호화된 비밀번호') = 1-그렇지 않으면 동일하지 않음 encrypt('원래 비밀번호
')
select pwdencrypt('원래 비밀번호
')
select pwdcompare('원래 비밀번호','암호화된 비밀번호') = 1--동일하고 그렇지 않으면 동일하지 않음

3.테이블의 필드 검색:
declare @list varchar(1000),
@sql nvarchar ( 1000)
sysobjects a,syscolumns b에서 @list=@list+','+b.name을 선택합니다. 여기서 a.id=b.id 및 a.name='
테이블A'
set @sql='select '+right(@list,len(@list)-1)+' from table A'
exec ( @sql)

4.하드 디스크 파티션 보기:
EXEC master..xp_fixeddrives

5.테이블 A와 B를 비교하여 동일한지 확인:
if(checksum_agg(binary_checksum(*) 선택) ) from A)
=
(select checksum_agg(binary_checksum(*)) from B)
print '
Equal'
else
print '같지 않음'

6.모든 프로파일러 프로세스 종료:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill'+RTRIM( spid) FROM master .dbo.sysprocesses
WHERE program_name IN('SQL 프로파일러',N'SQL
프로파일러')
EXEC sp_msforeach_worker '?
'

7.

레코드 검색:
~N개 레코드
테이블
---------N
으로
M 레코드(기본 인덱스ID가 있어야 함)Select Top M-N * From
Table Where ID in (Select Top M ID From 테이블) ID 설명순으로 정렬---------
N
기록을 종료하려면
Select Top N * From Table Order by ID Desc
Case예 1: 하나의 테이블에 다음보다 많은 값이 있습니다. 10,000개의 레코드. 테이블의 첫 번째 필드인 RecID는 자체 증가하는 필드입니다. 테이블의 31번째부터 40번째 레코드를 찾는 SQL 문을 작성하세요.

A에서 기록되지 않은 상위 ​​10개 항목 선택(A에서 상위 30개 항목 선택)

분석: 이렇게 작성하면, recid가 테이블에 논리적 인덱스를 가지고 있으면 몇 가지 문제가 발생할 것입니다.

Select top 10 recid from A where...가 인덱스에서 검색되는 반면, 후속 Select top 30 recid from A는 데이터 테이블에서 검색되므로 인덱스의 순서가 데이터 테이블의 순서와 일치하지 않을 수 있습니다. , 결과적으로 쿼리된 데이터는 원래 원하는 데이터가 아닙니다.

솔루션

1, A order by ricid에서 상위 30개 recid를 선택하여 order by ricid를 사용합니다. 필드가 자동으로 성장하지 않으면 문제가 발생합니다

2, 해당 하위 쿼리에 조건도 추가하세요. recid>-1인 A에서 상위 30개 레코드 선택

2: 테이블의 마지막 레코드를 쿼리합니다. 이 테이블에 , 데이터와 테이블 구조가 얼마나 있는지 알 수 없습니다.
set @s = 'pid가 없는 T에서 상위 1 * 선택(top ' + str(@count-1) + ' T에서 pid 선택)'

print @s exec sp_executesql @s

9: 현재 데이터베이스의 모든 사용자 테이블 가져오기
xtype='u' 및 status>=0인 sysobjects에서 이름 선택

10: 테이블의 모든 필드 가져오기
id=object_id('table name')인 syscolumns에서 이름 선택

id가 있는 syscolumns에서 이름 선택(유형 = 'u' 및 이름 = '테이블 이름'인 sysobjects에서 ID 선택)

두 방법 모두 효과는 같습니다

11: 테이블과 관련된 뷰, 저장 프로시저 및 함수를 봅니다.
sysobjects a, syscomments b에서 a.*를 선택합니다(여기서 a.id = b.id 및 b ). '%테이블 이름%' 같은 텍스트

12: 현재 데이터베이스의 모든 저장 프로시저 보기
xtype='P'인 sysobjects에서 저장 프로시저 이름으로 이름 선택

13: 사용자가 생성한 모든 데이터베이스 쿼리
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
또는
dbid를 선택하고 master..s에서 AS DB_NAME 이름을 지정합니다.ysdatabases where sid <> 0x01

14: 테이블의 필드 및 데이터 유형 쿼리
information_schema.columns에서 column_name,data_type 선택
여기서 table_name = '테이블 이름'

15: 서로 다른 서버 데이터베이스 간의 데이터 작업

--연결된 서버 만들기

exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '원격 서버 이름 또는 IP 주소'

exec sp_addlinkedsrvlogin 'ITSV', 'false',null, '사용자 이름', '비밀번호'

--쿼리 예

ITSV.database name.dbo.table 이름에서 * 선택

--가져오기 예시

ITSV.database name.dbo.table 이름에서 테이블로 *를 선택하세요

--연결된 서버를 더 이상 사용하지 않을 경우 삭제

exec sp_dropserver 'ITSV', 'droplogins'

--원격/LAN 데이터 연결(openrowset/openquery/opendatasource)

--1.열린 행 집합

--쿼리 예

openrowset에서 * 선택( 'SQLOLEDB', 'sql 서버 이름'; '사용자 이름'; '비밀번호', 데이터베이스 이름.dbo.table 이름)

--로컬 테이블 생성

openrowset( 'SQLOLEDB', 'sql server name'; 'user name'; 'password', 데이터베이스 이름.dbo.table name)에서 *를 테이블로 선택

--로컬 테이블을 원격 테이블로 가져오기

insert openrowset( 'SQLOLEDB', 'sql 서버 이름'; '사용자 이름'; '비밀번호', 데이터베이스 이름.dbo.table 이름)

로컬 테이블에서 *선택

--로컬 테이블 업데이트

업데이트b

b.열 A=a.열 A

설정

openrowset( 'SQLOLEDB', 'sql server name'; 'user name'; 'password', 데이터베이스 이름.dbo.table name)을 내부 조인 로컬 테이블 b로 사용

a.column1=b.column1

--openquery를 사용하려면 연결을 만들어야 합니다.

--먼저 연결을 생성하여 연결된 서버를 생성합니다.

exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '원격 서버 이름 또는 IP 주소'

--쿼리

*

선택

FROM openquery(ITSV, 'SELECT * FROM 데이터베이스.dbo.테이블 이름')

--로컬 테이블을 원격 테이블로 가져오기

openquery 삽입(ITSV, 'SELECT * FROM data.dbo.table name')

로컬 테이블에서 * 선택

--로컬 테이블 업데이트

업데이트b

b.열 B=a.열 B

설정

FROM openquery(ITSV, 'SELECT * FROM Database.dbo.tablename')을

으로

a.Column A=b.Column A의 내부 조인 로컬 테이블 b

--3. 오픈데이터소스/openrowset

선택 *

FROM opendatasource( 'SQLOLEDB', '데이터 소스=ip/ServerName;사용자 ID=로그인 이름;비밀번호=password ' ).test.dbo.roy_ta

--로컬 테이블을 원격 테이블로 가져오기

opendatasource 삽입( 'SQLOLEDB', '데이터 소스=ip/ServerName;사용자 ID=로그인 이름;비밀번호=비밀번호').Database.dbo.테이블 이름

로컬 테이블에서 * 선택

SQL Server 기본 기능

SQL Server 기본 기능

1. 문자열 함수 길이와 분석

1,datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格
2,substring(expression,start,length) 取子串,字符串的下标是从“1”,start为起始位置,length为字符串长度,实际应用中以len(expression)取得其长度
3,right(char_expr,int_expr) 返回字符串右边第int_expr个字符,还用left于之相反
4,isnull( check_expression replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作类

5,Sp_addtype 自定義數據類型
例如:EXEC sp_addtype birthday, datetime, 'NULL'

<code><span>6,set nocount {on|off}</span></code>
<span>使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。</span>
<span>SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。</span><br>
<span>SET NOCOUNT </span><span>为 OFF 时,返回计数</span>
<code><span>常识</span></code><code></code>
<code><span> </span></code>
<span><code>在SQL查询中:</code><code>from</code><code>后最多可以跟多少张表或视图:</code><code>256</code><code></code></span>
<span><code>在</code><code>SQL</code><code>语句中出现 </code><code>Order by</code><code>,</code><code>查询时,</code><code>先排序,后取</code></span>
<span><code>在</code><code>SQL</code><code>中,一个字段的最大容量是</code><code>8000</code><code>,而对于</code><code>nvarchar(4000)</code><code>,</code><code>由于</code><code>nvarchar</code><code>是Unicode码。  </code></span>
<code><span>        </span></code>
<code><span>SQLServer2000</span></code><span><code>同步复制技术实现步骤</code><code></code></span>
<code><span>一、 预备工作</span></code><code></code>
<span><code>1.</code><code>发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户</code></span>
<span><code>--</code><code>管理工具</code></span>
<span><code>--</code><code>计算机管理</code></span>
<span><code>--</code><code>用户和组</code></span>
<span><code>--</code><code>右键用户</code></span>
<span><code>--</code><code>新建用户</code></span>
<span><code>--</code><code>建立一个隶属于administrator组的登陆windows的用户(SynUser)</code></span>
<span><code>2.</code><code>在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:</code></span>
<code><span>我的电脑--D:\ 新建一个目录,名为: PUB</span></code>
<span><code>--</code><code>右键这个新建的目录</code></span>
<span><code>--</code><code>属性--共享</code></span>
<span><code>--</code><code>选择"共享该文件夹"</code></span>
<span><code>--</code><code>通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户(SynUser) 具有对该文件夹的所有权限</code></span>
<code><span> </span></code>
<span><code>--</code><code>确定</code></span>
<span><code>3.</code><code>设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)</code></span>
<code><span>开始--程序--管理工具--服务</span></code>
<span><code>--</code><code>右键SQLSERVERAGENT</code></span>
<span><code>--</code><code>属性--登陆--选择"此账户"</code></span>
<span><code>--</code><code>输入或者选择第一步中创建的windows登录用户名(SynUser)</code></span>
<span><code>--"</code><code>密码"中输入该用户的密码</code></span>
<span><code>4.</code><code>设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)</code></span>
<code><span>企业管理器</span></code>
<span><code>--</code><code>右键SQL实例--属性</code></span>
<span><code>--</code><code>安全性--身份验证</code></span>
<span><code>--</code><code>选择"SQL Server 和 Windows"</code></span>
<span><code>--</code><code>确定</code></span>
<span><code>5.</code><code>在发布服务器和订阅服务器上互相注册</code></span>
<code><span>企业管理器</span></code>
<span><code>--</code><code>右键SQL Server组</code></span>
<span><code>--</code><code>新建SQL Server注册...</code></span>
<span><code>--</code><code>下一步--可用的服务器中,输入你要注册的远程服务器名 --添加</code></span>
<span><code>--</code><code>下一步--连接使用,选择第二个"SQL Server身份验证"</code></span>
<span><code>--</code><code>下一步--输入用户名和密码(SynUser)</code></span>
<span><code>--</code><code>下一步--选择SQL Server组,也可以创建一个新组</code></span>
<span><code>--</code><code>下一步--完成</code></span>
<span><code>6.</code><code>对于只能用IP,不能用计算机名的,为其注册服务器别名(此步在实施中没用到)</code></span>
<span><code> (</code><code>在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)</code></span>
<code><span>开始--程序--Microsoft SQL Server--客户端网络实用工具</span></code>
<span><code>--</code><code>别名--添加</code></span>
<span><code>--</code><code>网络库选择"tcp/ip"--服务器别名输入SQL服务器名</code></span>
<span><code>--</code><code>连接参数--服务器名称中输入SQL服务器ip地址</code></span>
<span><code>--</code><code>如果你修改了SQL的端口,取消选择"动态决定端口",并输入对应的端口号</code></span>
<code><span>二、 正式配置</span></code><code></code>
<span><code>1</code><code>、配置发布服务器</code></span>
<code><span>打开企业管理器,在发布服务器(B、C、D)上执行以下步骤:</span></code>
<span><code>(1) </code><code>从[工具]下拉菜单的[复制]子菜单中选择[配置发布、订阅服务器和分发]出现配置发布和分发向导 </code></span>
<span><code>(2) [</code><code>下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器(选择自己)</code></span>
<span><code>(3) [</code><code>下一步] 设置快照文件夹</code></span>
<code><span>采用默认\\servername\Pub</span></code>
<span><code>(4) [</code><code>下一步] 自定义配置 </code></span>
<code><span>可以选择:是,让我设置分发数据库属性启用发布服务器或设置发布设置</span></code>
<code><span>否,使用下列默认设置(推荐)</span></code>
<span><code>(5) [</code><code>下一步] 设置分发数据库名称和位置 采用默认值</code></span>
<span><code>(6) [</code><code>下一步] 启用发布服务器 选择作为发布的服务器</code></span>
<span>(7) [下一步] 选择需要发布的数据库和发布类型</span>
<span><code>(8) [</code><code>下一步] 选择注册订阅服务器</code></span>
<span><code>(9) [</code><code>下一步] 完成配置</code></span>
<span><code>2</code><code>、创建出版物</code></span>
<code><span>发布服务器B、C、D上</span></code>
<span><code>(1)</code><code>从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令</code></span>
<span><code>(2)</code><code>选择要创建出版物的数据库,然后单击[创建发布]</code></span>
<span><code>(3)</code><code>在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)</code></span>
<span><code>(4)</code><code>单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,</code></span>
<span><code>SQLSERVER</code><code>允许在不同的数据库如 orACLE或ACCESS之间进行数据复制。</code></span>
<code><span>但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器</span></code>
<span><code>(5)</code><code>单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表</code></span>
<code><span>注意: 如果前面选择了事务发布 则再这一步中只能选择带有主键的表</span></code>
<span><code>(6)</code><code>选择发布名称和描述</code></span>
<span><code>(7)</code><code>自定义发布属性 向导提供的选择:</code></span>
<code><span>是 我将自定义数据筛选,启用匿名订阅和或其他自定义属性</span></code>
<code><span>否 根据指定方式创建发布 (建议采用自定义的方式)</span></code>
<span><code>(8)[</code><code>下一步] 选择筛选发布的方式 </code></span>
<span><code>(9)[</code><code>下一步] 可以选择是否允许匿名订阅</code></span>
<span><code>1)</code><code>如果选择署名订阅,则需要在发布服务器上添加订阅服务器</code></span>
<code><span>方法: [工具]->[复制]->[配置发布、订阅服务器和分发的属性]->[订阅服务器] 中添加</span></code>
<code><span>否则在订阅服务器上请求订阅时会出现的提示:改发布不允许匿名订阅</span></code>
<code><span>如果仍然需要匿名订阅则用以下解决办法 </span></code>
<span><code>[</code><code>企业管理器]->[复制]->[发布内容]->[属性]->[订阅选项] 选择允许匿名请求订阅</code></span>
<span><code>2)</code><code>如果选择匿名订阅,则配置订阅服务器时不会出现以上提示</code></span>
<span><code>(10)[</code><code>下一步] 设置快照 代理程序调度</code></span>
<span><code>(11)[</code><code>下一步] 完成配置</code></span>
<code><span>当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库</span></code>
<code><span>有数据 </span></code>
<span><code>srv1.</code><code>库名..author有字段:id,name,phone, </code></span>
<span><code>srv2.</code><code>库名..author有字段:id,name,telphone,adress </code></span>
<code><span> </span></code>
<code><span>要求: </span></code>
<span><code>srv1.</code><code>库名..author增加记录则srv1.库名..author记录增加 </code></span>
<span><code>srv1.</code><code>库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新 </code></span>
<code><span>--*/ </span></code>
<code><span> </span></code>
<span><code>--</code><code>大致的处理步骤 </code></span>
<span><code>--1.</code><code>在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步 </code></span>
<span><code>exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2</code><code>的sql实例名或ip' </code></span>
<span><code>exec sp_addlinkedsrvlogin 'srv2','false',null,'</code><code>用户名','密码' </code></span>
<code><span>go</span></code>
<span><code>--2.</code><code>在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动</code></span>
<code><span>。我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动 </span></code>
<code><span>go </span></code>
<code><span> </span></code>
<code><span> </span></code>
<span><code>--</code><code>然后创建一个作业定时调用上面的同步处理存储过程就行了 </code></span>
<code><span> </span></code>
<code><span>企业管理器 </span></code>
<span><code>--</code><code>管理 </code></span>
<span><code>--SQL Server</code><code>代理 </code></span>
<span><code>--</code><code>右键作业 </code></span>
<span><code>--</code><code>新建作业 </code></span>
<span><code>--"</code><code>常规"项中输入作业名称 </code></span>
<span><code>--"</code><code>步骤"项 </code></span>
<span><code>--</code><code>新建 </code></span>
<span><code>--"</code><code>步骤名"中输入步骤名 </code></span>
<span><code>--"</code><code>类型"中选择"Transact-SQL 脚本(TSQL)" </code></span>
<span><code>--"</code><code>数据库"选择执行命令的数据库 </code></span>
<span><code>--"</code><code>命令"中输入要执行的语句: exec p_process </code></span>
<span><code>--</code><code>确定 </code></span>
<span><code>--"</code><code>调度"项 </code></span>
<span><code>--</code><code>新建调度 </code></span>
<span><code>--"</code><code>名称"中输入调度名称 </code></span>
<span><code>--"</code><code>调度类型"中选择你的作业执行安排 </code></span>
<span><code>--</code><code>如果选择"反复出现" </code></span>
<span><code>--</code><code>点"更改"来设置你的时间安排 </code></span>
<code><span> </span></code>
<code><span> </span></code>
<code><span>然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 </span></code>
<code><span> </span></code>
<code><span>设置方法: </span></code>
<code><span>我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定. </span></code>
<code><span> </span></code>
<code><span> </span></code>
<span><code>--3.</code><code>实现同步处理的方法2,定时同步 </code></span>
<code><span> </span></code>
<span><code>--</code><code>在srv1中创建如下的同步处理存储过程 </code></span>
<code><span>create proc p_process </span></code>
<code><span>as </span></code>
<span><code>--</code><code>更新修改过的数据 </code></span>
<code><span>update b set name=i.name,telphone=i.telphone </span></code>
<span><code>from srv2.</code><code>库名.dbo.author b,author i </code></span>
<code><span>where b.id=i.id and</span></code>
<code><span>(b.name <> i.name or b.telphone <> i.telphone) </span></code>
<code><span> </span></code>
<span><code>--</code><code>插入新增的数据 </code></span>
<span><code>insert srv2.</code><code>库名.dbo.author(id,name,telphone) </code></span>
<code><span>select id,name,telphone from author i </span></code>
<code><span>where not exists( </span></code>
<span><code>select * from srv2.</code><code>库名.dbo.author where id=i.id) </code></span>
<code><span> </span></code>
<span><code>--</code><code>删除已经删除的数据(如果需要的话) </code></span>
<code><span>delete b </span></code>
<span><code>from srv2.</code><code>库名.dbo.author b </code></span>
<code><span>where not exists( </span></code>
<code><span>select * from author where id=b.id)</span></code>
<span>go</span>

以上就介绍了经典SQL语句大全,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.