SQL Server의 숨겨진 기능
예를 들어, 문서화되지 않은 시스템 저장 프로시저, 매우 유용하지만 충분히 문서화되어 있지 않은 작업을 수행하는 요령 등이 있습니다.
답들
모든 훌륭한 답변에 감사드립니다!
스토어드 프로시저
- sp_msforeachable:각 테이블 이름으로 대체된 ? 명령어를 실행합니다(v6.5 이상).
- sp_msforeachdb: 각 데이터베이스 이름으로 대체된 ? 명령어를 실행합니다(v7 이상).
- sp_who2: sp_who와 동일하지만 블록의 트러블 슈팅에 관한 많은 정보가 포함되어 있습니다(v7 이후).
- sp_helptext:스토어드 프로시저의 코드가 필요한 경우는, 표시와 UDF 를 참조해 주세요.
- sp_parames: 범위 내 데이터베이스의 모든 테이블 및 뷰 목록을 반환합니다.
- sp_parames_procedures: 모든 저장 프로시저의 목록을 반환합니다.
- xp_sscanf:문자열에서 각 format 인수로 지정된 인수 위치로 데이터를 읽습니다.
- xp_http 드라이브:사용 가능한 공간이 가장 큰 고정 드라이브 찾기
- sp_help: 테이블의 구조, 인덱스 및 구속조건을 알고 싶은 경우.뷰 및 UDF도 있습니다.바로 가기는 Alt+F1입니다.
단편
- 랜덤 순서로 행 반환
- 최종 수정일 기준 모든 데이터베이스 사용자 개체
- 반환일만
- 이번 주 안에 해당하는 날짜를 찾습니다.
- 지난주에 발생한 기록을 찾습니다.
- 현재 주의 시작 날짜를 반환합니다.
- 지난주 시작 날짜를 반환합니다.
- 서버에 전개된 순서의 텍스트를 참조해 주세요.
- 데이터베이스에 대한 모든 연결 끊기
- 테이블 체크섬
- 행 체크섬
- 데이터베이스의 모든 프로시저를 삭제합니다.
- 복원 후 로그인 ID를 올바르게 다시 매핑합니다.
- INSERT 문에서 스토어드 프로시저를 호출하다
- 키워드로 프로시저 검색
- 데이터베이스의 모든 프로시저를 삭제합니다.
- 트랜잭션 로그에서 데이터베이스를 프로그래밍 방식으로 쿼리합니다.
기능들
- 해시 바이트()
- EncryptByKey(암호화 기준)
- 피벗 명령어
기타
- 접속 문자열 추가
- TableDiff.실행
- 로그온 이벤트 트리거(Service Pack 2의 새로운 기능)
- 지속 계산 컬럼(PCC)을 사용하여 퍼포먼스를 향상시킵니다.
- sys.database_princies의 DEFAULT_SCHEMA 설정
- 강제 파라미터화
- Vardecimal 스토리지 형식
- 가장 많이 사용되는 쿼리 검색(초)
- 확장 가능한 공유 데이터베이스
- SQL Management Studio의 테이블/저장 프로시저 필터 기능
- 트레이스 플래그
- 뒤에
GO처리를 - 스키마를 사용한 보안
- 내장된 암호화 기능, 뷰 및 트리거가 포함된 기본 테이블을 사용한 암호화
Management Studio에서 GO 배치 종료 마커 뒤에 숫자를 입력하면 배치가 이 횟수만큼 반복됩니다.
PRINT 'X'
GO 10
X를 10회 인쇄합니다.이렇게 하면 반복적인 작업을 할 때 지루한 복사/붙여넣기 작업을 줄일 수 있습니다.
많은 SQL Server 개발자들은 DELETE, INSERT 및 UPDATE 문장의 OUTPUT 조항(SQL Server 2005 이후)에 대해 아직 모르고 있는 것 같습니다.
INSERTED,중 알면 구를 하면 INSERTED, UPDATEDDELETD라고 하는 에 쉽게 수 .OUTPUT 절을 사용하면 다음과 같은 "가상" 테이블에 쉽게 액세스할 수 있습니다.inserted ★★★★★★★★★★★★★★★★★」deleted): (트리거와 같이):
DELETE FROM (table)
OUTPUT deleted.ID, deleted.Description
WHERE (condition)
INT IDENT 프라이머리 키필드가 있는 테이블에 OUTPUT 구를 사용하여 값을 삽입하는 경우 삽입된 새 ID를 바로 얻을 수 있습니다.
INSERT INTO MyTable(Field1, Field2)
OUTPUT inserted.ID
VALUES (Value1, Value2)
할 때이 바뀌었는지 이 될 수 요. 이 , 이 경우, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이,insertedUPDATE 후을 나타내며, (UPDATE)는 UPDATE를 나타냅니다.deleted는 UPDATE "UPDATE: "UPDATE" 이전 .
UPDATE (table)
SET field1 = value1, field2 = value2
OUTPUT inserted.ID, deleted.field1, inserted.field1
WHERE (condition)
은 임시 또는 변수OUTPUT)로.OUTPUT INTO @myInfoTable를 참조해 주세요.
매우 유용하고 거의 알려지지 않았습니다!
마크
sp_msforeachtable각이름으로 ? 합니다. 각 테이블 이름으로 대체된 ? 명령어를 실행합니다.
exec sp_msforeachtable "dbcc dbreindex('?')"
테이블마다 최대 3개의 명령어를 발행할 수 있습니다.
exec sp_msforeachtable
@Command1 = 'print ''reindexing table ?''',
@Command2 = 'dbcc dbreindex(''?'')',
@Command3 = 'select count (*) [?] from ?'
ㅇㅇㅇㅇ.sp_MSforeachdb
연결 문자열 추가:
MultipleActiveResultSets=true;
이것으로 ADO가 됩니다.Net 2.0 이상에서는, 1개의 데이타베이스 접속으로 복수의 읽기 전용의 읽기 전용의 결과 세트를 사용할 수 있기 때문에, 대량의 읽기를 실시할 경우에 퍼포먼스가 향상됩니다.여러 쿼리 유형을 혼합하는 경우에도 이 옵션을 설정할 수 있습니다.
응용 프로그램 이름=MyProgramName
syspprocesses 테이블을 조회하여 활성 연결 목록을 보려면 " 대신 program_name 열에 프로그램 이름이 표시됩니다.Net SqlClient 데이터 공급자"
TableDiff.실행
- Table Difference 도구를 사용하면 소스 테이블과 대상 테이블 또는 뷰 간의 차이를 검출하고 조정할 수 있습니다.Tablediff 유틸리티는 스키마와 데이터의 차이를 보고할 수 있습니다.tablediff의 가장 일반적인 기능은 테이블 간의 차이를 조정하는 수신처에서 실행할 수 있는 스크립트를 생성할 수 있다는 것입니다.
행을 랜덤 순서로 되돌리기 위한 덜 알려진 TSQL 기법:
-- Return rows in a random order
SELECT
SomeColumn
FROM
SomeTable
ORDER BY
CHECKSUM(NEWID())
Management Studio에서는 다음과 같이 테이블의 콤마 구분 열 목록을 빠르게 가져올 수 있습니다.
- 오브젝트 탐색기에서 지정된 테이블 아래의 노드를 확장합니다(열, 키, 제약 조건, 트리거 등의 폴더가 표시됩니다).
- Columns 폴더를 가리키고 쿼리로 끕니다.
테이블을 오른쪽 클릭하여 [스크립트 테이블 이름...]를 선택한 후 [삽입처...]를 선택하면 반환되는 악의적인 형식을 사용하지 않을 때 편리합니다.이 트릭은 다른 폴더와 함께 사용할 수 있으므로 폴더에 포함된 이름의 쉼표 목록을 제공합니다.
행 생성자
하나의 삽입문으로 여러 행의 데이터를 삽입할 수 있습니다.
INSERT INTO Colors (id, Color)
VALUES (1, 'Red'),
(2, 'Blue'),
(3, 'Green'),
(4, 'Yellow')
테이블 구조, 인덱스 및 구속조건을 알고 싶은 경우:
sp_help 'TableName'
HashBytes() 입력의 MD2, MD4, MD5, SHA 또는 SHA1 해시를 반환합니다.
가장 많이 사용되는 쿼리 파악
- sys.dm_exec_sec_sec_sec를 사용하면 단일 쿼리로 여러 쿼리 분석 조합을 파악할 수 있습니다.
Commnad와 링크
select * from sys.dm_exec_query_stats
order by execution_count desc
공간 결과 탭을 사용하여 아트를 생성할 수 있습니다.
링크 설명을 여기에 입력합니다.http://michaeljswart.com/wp-content/uploads/2010/02/venus.png
이 두 키워드는 조인과 서브쿼리를 상세하게 작성하는 것이 아니라 두 쿼리 결과를 비교할 때 쿼리의 의도를 보다 우아하고 쉽게 표현할 수 있는 방법입니다.SQL Server 2005의 새로운 버전에서는 이미 몇 년 전부터 TSQL 언어로 존재해 온 UNION을 강력하게 보완하고 있습니다.
EXCEPT, CRESS 및 UNION의 개념은 모든 현대 RDBMS에서 사용되는 관계형 모델링의 기초 및 기초가 되는 집합 이론의 기초입니다.이제 TSQL을 사용하여 Venn 다이어그램 유형의 결과를 보다 직관적이고 쉽게 생성할 수 있습니다.
확실히 숨겨져 있는 것은 아니지만, 피벗 커맨드에 대해 아는 사람은 많지 않습니다.저장 프로시저를 변경할 수 있었습니다.커서로 2분만에 행수의 10분의 1에 해당하는 6초의 코드에 액세스 할 수 있었습니다.
데이터베이스를 테스트 목적으로 복원하거나 기타 용도로 복원할 때 유용합니다.로그인 ID를 올바르게 재매핑합니다.
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'
데이터베이스에 대한 모든 연결을 끊습니다.
Use Master
Go
Declare @dbname sysname
Set @dbname = 'name of database you want to drop connections from'
Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
Execute ('Kill ' + @spid)
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname) and spid > @spid
End
테이블 체크섬
Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK)
행 체크섬
Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK) Where Column = Value
이것이 숨겨진 특징인지 아닌지는 모르겠지만, 우연히 발견되어 많은 경우에 유용하게 사용되고 있습니다.커서를 사용하여 select 문을 반복하지 않고 단일 select 문으로 필드 세트를 합성할 수 있습니다.
예:
DECLARE @nvcConcatonated nvarchar(max)
SET @nvcConcatonated = ''
SELECT @nvcConcatonated = @nvcConcatonated + C.CompanyName + ', '
FROM tblCompany C
WHERE C.CompanyID IN (1,2,3)
SELECT @nvcConcatonated
결과:
Acme, Microsoft, Apple,
저장 프로시저의 코드를 원할 경우 다음을 수행할 수 있습니다.
sp_helptext 'ProcedureName'
(숨겨진 기능인지는 모르겠지만 항상 사용하고 있습니다)
저장 프로시저 트릭은 INSERT 문에서 호출할 수 있다는 것입니다.SQL Server 데이터베이스에서 작업할 때 매우 유용하다는 것을 알게 되었습니다.
CREATE TABLE #toto (v1 int, v2 int, v3 char(4), status char(6))
INSERT #toto (v1, v2, v3, status) EXEC dbo.sp_fulubulu(sp_param1)
SELECT * FROM #toto
DROP TABLE #toto
SQL Server 2005/2008에서 SELECT 쿼리 결과에 행 번호를 표시하는 경우:
SELECT ( ROW_NUMBER() OVER (ORDER BY OrderId) ) AS RowNumber,
GrandTotal, CustomerId, PurchaseDate
FROM Orders
ORDER BY는 필수 조항입니다.OVER() 절은 SQL Engine에 지정된 열(이 경우 OrderId)의 데이터를 정렬하고 정렬 결과에 따라 번호를 할당하도록 지시합니다.
스토어드 프로시저 인수를 해석하는 데 도움이 됩니다.xp_sscanf
문자열에서 각 format 인수로 지정된 인수 위치로 데이터를 읽습니다.
다음 예제에서는 xp_sscanf를 사용하여 소스 문자열 형식의 위치에 따라 소스 문자열에서2개의 값을 추출합니다.
DECLARE @filename varchar (20), @message varchar (20)
EXEC xp_sscanf 'sync -b -fproducts10.tmp -rrandom', 'sync -b -f%s -r%s',
@filename OUTPUT, @message OUTPUT
SELECT @filename, @message
다음은 결과 세트입니다.
-------------------- --------------------
products10.tmp random
반환일만
Select Cast(Floor(Cast(Getdate() As Float))As Datetime)
또는
Select DateAdd(Day, 0, DateDiff(Day, 0, Getdate()))
dm_db_index_syslogs_syslogs
이를 통해 테이블에 DateUpdated 열이 없는 경우에도 테이블의 데이터가 최근에 업데이트되었는지 여부를 알 수 있습니다.
SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'MyDatabase')
AND OBJECT_ID=OBJECT_ID('MyTable')
코드명 : http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/
참조처: SQL Server - 테이블의 마지막 삽입 행의 날짜/시간
SQL 2005 이후 이용 가능
여기 도움이 되는 기능이 몇 가지 있습니다만, 많은 사람들이 모르는 것 같습니다.
sp_tables
현재 환경에서 쿼리할 수 있는 개체 목록을 반환합니다.이는 동의어 개체를 제외하고 FROM 절에 표시될 수 있는 모든 개체를 의미합니다.
sp_stored_procedures
현재 환경의 저장 프로시저 목록을 반환합니다.
이번 주 안에 해당하는 날짜를 찾습니다.
where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ), 0 )
지난주에 발생한 기록을 찾습니다.
where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )
현재 주의 시작 날짜를 반환합니다.
select dateadd( week, datediff( week, 0, getdate() ), 0 )
지난주 시작 날짜를 반환합니다.
select dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )
숨겨진 기능은 아니지만 Management Studio의 Tools\Options\Keyboard에서 키 매핑을 설정합니다.Alt+F1은 기본적으로 sp_help "selected text"로 설정되어 있지만 sp_helpt "selected text"에 Ctrl+F1을 추가하지 않으면 사용할 수 없습니다.
지속 계산 컬럼
- 계산된 열은 런타임 계산 비용을 데이터 수정 단계로 전환하는 데 도움이 됩니다.계산된 열은 나머지 행과 함께 저장되며 계산된 열과 쿼리의 식이 일치할 때 투명하게 사용됩니다.PCC에 인덱스를 구축하여 식에 대한 필터링 및 범위 검색 속도를 높일 수도 있습니다.
정렬 기준이 되는 열이 없거나 테이블에서 기본 정렬 순서를 원할 때 각 행을 열거할 수 있습니다.그러기 위해서는 "order by" 절에 "select 1"을 입력하면 원하는 것을 얻을 수 있습니다.깔끔하지?
select row_number() over (order by (select 1)), * from dbo.Table as t
EncryptByKey를 통한 심플한 암호화
언급URL : https://stackoverflow.com/questions/121243/hidden-features-of-sql-server
'source' 카테고리의 다른 글
| 목록에서 무작위로 50개 항목 선택 (0) | 2023.04.12 |
|---|---|
| SQL Server - 트랜잭션 롤백 오류 발생? (0) | 2023.04.07 |
| SQL Server 출력 절을 스칼라 변수로 변환 (0) | 2023.04.07 |
| SQL에서 월의 첫 번째 날을 선택하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
| 에서 무효 또는 예기치 않은 파라미터에 대해 발생하는 예외는 무엇입니까?인터넷? (0) | 2023.04.07 |