MS-SQL / SQL Server

프로시저 생성일, 수정일, 내용 출력하기


SELECT

CONVERT(varchar(10), getdate(), 120) LogDage

, getdate() AS LogDateTime

, A.name

, A.type_desc

, A.create_date

, A.modify_date

, B.definition

FROM sys.objects AS A JOIN sys.sql_modules AS B

ON A.object_id = B.object_id

WHERE A.schema_id = 1 AND type = 'P'

MS-SQL / SQL Server

프로시져 내용 확인하기


해당 프로시저의 내용을 확인할 수 있다.

definition 컬럼을 확인.

 

SELECT * FROM sys.sql_modules WHERE OBJECT_ID = OBJECT_ID('프로시저명');

MS-SQL / SQL Server

프로시저 생성일/수정일 확인하기


SELECT

CONVERT(varchar(10), getdate(), 120) LogDage

, getdate() AS LogDateTime

, A.name

, A.type_desc

, A.create_date

, A.modify_date

FROM sys.objects AS A JOIN sys.sql_modules AS B

ON A.object_id = B.object_id

WHERE A.schema_id = 1 AND type = 'P'

트랜잭션 백업시 BACKUP LOG is terminating abnormally 에러는? 


트랜잭션 로그를 백업을 하였을때

다음과 같은 에러가 발생하였다면,

 

Msg 4214, Level 16, State 1, Line 1

BACKUP LOG cannot be performed because there is no current database backup.

Msg 3013, Level 16, State 1, Line 1

BACKUP LOG is terminating abnormally.

 

로그백업은 전체백업을 받은 시점부터 그 이후의 로그를 백업하는 개념이라서 반드시 전체백업이 한본 있어야 합니다.

그리고 로그백업을 받더라도 전체백업을 가지고 있어야 합니다.

그래야 전체백업을 복원하고 그 이후의 로그백업들을 차레차레 복원하면서 최신상태로 백업 복원을 할 수 있습니다.

즉, 전체백업을 한번 실행시킨후에 로그백업을 해보세요.

MS-SQL / SQL Server

DBCC 명령어 - 데이터베이스, 테이블, 인덱스, 카탈로그, 파일그룹 관리 요약

 

유지 관리: 데이터베이스, 인덱스 또는 파일 그룹에 대한 유지 관리 작업

DBCC CLEANTABLE
테이블 또는 인덱싱된 뷰의 삭제된 가변 길이 열에서 공간을 반환

DBCC INDEXDEFRAG
지정된 테이블 또는 뷰의 인덱스를 조각 모음
(*2005 이후에는 지원되지 않음. ALTER INDEX로 대체됨)

DBCC DBREINDEX
지정한 데이터베이스의 테이블에 대해 하나 이상의 인덱스를 다시 작성
(*2005 이후에는 지원되지 않음. ALTER INDEX로 대체됨)

DBCC SHRINKDATABASE
지정한 데이터베이스에 있는 데이터 및 로그 파일의 크기를 축소

DBCC DROPCLEANBUFFERS
버퍼 풀에서 빈 버퍼를 모두 제거

DBCC SHRINKFILE
지정한 데이터 또는 로그 파일의 크기를 축소하거나 데이터를 같은 파일 그룹의 다른 파일로 이동

DBCC FREEPROCCACHE
프로시저 캐시에서 모든 요소를 제거

DBCC UPDATEUSAGE 
카탈로그 뷰의 부정확한 페이지와 행 개수를 보고하고 수정

 
기타: 추적 플래그 설정이나 메모리에서 DLL 제거 같은 기타 작업

DBCC dllname(FREE)
지정된 확장 저장 프로시저 DLL을 메모리에서 언로드

DBCC TRACEON
지정한 추적 플래그를 설정

DBCC TRACEOFF
지정한 추적 플래그를 해제

DBCC HELP
지정한 DBCC 명령의 구문 정보를 반환


알림
: 다양한 정보를 수집하고 표시하는 작업

DBCC CONCURRENCYVIOLATION
SQL Server 2000 Desktop Engine 또는 SQL Server 2000 Personal Edition에서 다섯 개가 넘는 일괄 처리가 동시에 실행되는 횟수에 대한 통계를 표시 (*2005 에서는 하위 호환성을 위해 지원)

DBCC SHOW_STATISTICS
지정한 테이블에서 특정 대상에 대한 현재 배포 통계를 표시합니다.

DBCC INPUTBUFFER
클라이언트가 Microsoft SQL Server 2005 인스턴스로 마지막으로 전송한 문을 표시

DBCC SHOWCONTIG
지정한 테이블이나 뷰의 데이터와 인덱스에 대한 조각화 정보를 표시(*2005 이후는 지원되지 않음)

DBCC OPENTRAN
지정한 데이터베이스에서 가장 오래된 활성 트랜잭션과 가장 오래된 분산 및 비분산 복제 트랜잭션에 대한 정보를 표시

DBCC SQLPERF
모든 데이터베이스에서 트랜잭션 로그 공간이 사용된 방법에 관한 통계를 제공

DBCC OUTPUTBUFFER
지정된 session_id의 현재 출력 버퍼를 16진수와 ASCII 형식으로 반환

DBCC TRACESTATUS
추적 플래그의 상태를 표시

DBCC PROCCACHE
프로시저 캐시에 대한 정보를 테이블 형식으로 표시

DBCC USEROPTIONS
현재 연결에 설정된 SET 옵션을 반환


유효성 검사: 데이터베이스, 테이블, 인덱스, 카탈로그, 파일 그룹 또는 데이터베이스 페이지 할당에 대한 유효성 검사 작업

DBCC CHECKALLOC
지정된 데이터베이스에 대한 디스크 공간 할당 구조의 일관성을 검사

DBCC CHECKFILEGROUP
현재 데이터베이스의 지정한 파일 그룹에서 모든 테이블과 인덱싱된 뷰의 할당 및 구조적 무결성 검사

DBCC CHECKCATALOG
지정한 데이터베이스 내의 카탈로그 일관성을 검사

DBCC CHECKIDENT
지정한 테이블의 현재 ID 값을 검사하고 필요에 따라 변경

DBCC CHECKCONSTRAINTS
현재 데이터베이스의 지정한 테이블에서 특정 제약 조건이나 모든 제약 조건의 무결성을 검사

DBCC CHECKTABLE
테이블 또는 인덱싱된 뷰를 구성하는 모든 페이지 및 구조의 무결성을 검사

DBCC CHECKDB
지정한 데이터베이스에서 모든 개체의 논리적 무결성 및 물리적 무결성을 검사

MS-SQL / SQL Server

테이블목록,필드정보 가져오는 프로시저생성

 

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

 


create   proc sp_tableform
as
declare @no varchar(35), @yes varchar(35), @none varchar(35)
 select @no = name from master.dbo.spt_values where type = 'B' and number = 0
 select @yes = name from master.dbo.spt_values where type = 'B' and number = 1
 select @none = name from master.dbo.spt_values where type = 'B' and number = 2
 declare @numtypes nvarchar(80)
  select @numtypes = N'tinyint,smallint,decimal,int,real,money,float,numeric,smallmoney'
 select
   so.name as 'table_name', 
   sc.name as 'colum_name' ,
   type_name(sc.xusertype)  as 'Type',
   case when sc.iscomputed = 0 then @no else @yes end as 'Computed',
   convert(int, sc.length) as 'Length',
    case when charindex(type_name(sc.xtype), @numtypes) > 0
   then convert(char(5),ColumnProperty(sc.id, sc.name, 'precision'))
   else '     ' end  as 'Prec',
    case when charindex(type_name(sc.xtype), @numtypes) > 0
   then convert(char(5),OdbcScale(sc.xtype,sc.xscale))
   else '     ' end  as 'Scale',
   case when sc.isnullable = 0 then @no else @yes end  as 'Nullable',
   sp.value 'value'
  from sysobjects so, syscolumns sc,sysproperties sp
   where so.xtype='U' and sc.id = so.id  and so.id*=sp.id and sc.colid *= sp.smallid
   and sc.number = 0 order by so.name, sc.colid

 


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

MS-SQL / SQL Server

두 테이블의 데이터 차이 비교 - TableDiff Utility

 

SQL Server 에서 두 테이블의 데이터 차이점을 비교해 볼 수 있을까요?
네, TableDiff 유틸리티를 사용하여 차이점을 비교해 볼 수 있습니다. TableDiff 도구를 사용하는 방법에 대해서 아래와 같이 예제를 만들어 봤습니다.

-- A, B 2개의 테이블을 생성하여 데이터를 입력합니다.

USE LAIGO
GO

CREATE TABLE A
(
MEMBER_ID int IDENTITY(1,1) NOT NULL,
MEMBER_NAME nvarchar(10) NOT NULL,
MEMBER_POINT int NOT NULL -- 포인트
)

INSERT INTO A VALUES ('라이고',30000)
INSERT INTO A VALUES ('정지훈',10000)
INSERT INTO A VALUES ('박지성',5000)
INSERT INTO A VALUES ('장동건',2000)
INSERT INTO A VALUES ('이병헌',9000)
INSERT INTO A VALUES ('김태희',4000)
INSERT INTO A VALUES ('고현정',8000)



CREATE TABLE B
(
MEMBER_ID int IDENTITY(1,1) NOT NULL,
MEMBER_NAME nvarchar(10) NOT NULL,
MEMBER_POINT int NOT NULL
)

-- 2건의 데이터를 A 테이블과 다르게 입력하였습니다.
INSERT INTO B VALUES ('라이고',3000) -- 30000
INSERT INTO B VALUES ('정지훈',10000)
INSERT INTO B VALUES ('박지성',5000)
INSERT INTO B VALUES ('장동건',20000)-- 2000
INSERT INTO B VALUES ('이병헌',9000)
INSERT INTO B VALUES ('김태희',4000)
INSERT INTO B VALUES ('고현정',8000)


[TableDiff 사용방법]
A, B 테이블의 차이점을 d:\temp\diff.sql 파일로 Export 하는 명령 구문
C:\Program Files\Microsoft SQL Server\90\COM>TableDiff -sourceserver laigo-pc -sourcedatabase laigo -sourcetable A -sourceuser sa -sourcepassword Pa$$w0rd -destinationserver . -destinationdatabase laigo -destinationtable B -destinationuser sa -destinationpassword Pa$$w0rd -f d:\temp\diff.sql


[TableDiff 결과]
diff.sql 파일을 열어보면 아래와 같이 쿼리가 생성되어 있습니다.
SET IDENTITY_INSERT [dbo].[b] ON
UPDATE [dbo].[b] SET [MEMBER_POINT]=30000 WHERE [MEMBER_ID] = 1
UPDATE [dbo].[b] SET [MEMBER_POINT]=2000 WHERE [MEMBER_ID] = 4
SET IDENTITY_INSERT [dbo].[b] OFF


[참고자료]
tablediff Utility
http://msdn.microsoft.com/en-us/library/ms162843.aspx

 

MS-SQL / SQL Server

Windows 데이터 정렬 스타일


SQL Server 설치 중에 Windows 데이터 정렬 또는 이진 데이터 정렬 중 하나를 선택하라는 메시지가 표시됩니다. 선택하는 데이터 정렬에 따라 Microsoft SQL Server 인스턴스의 데이터 비교 및 정렬 순서 동작이 달라집니다. 이 항목에서는 SQL Server 구현 시 Microsoft Windows 데이터 정렬 또는 이진 데이터 정렬을 선택할 때 고려해야 할 사항을 다룹니다.

참고:

Windows 데이터 정렬의 경우 ncharnvarchar 및 ntext 유니코드 데이터 형식은 charvarchar 및 text 비유니코드 데이터 형식과 같은 정렬 동작을 합니다.

Windows 데이터 정렬은 관련 Windows 로캘을 기반으로 문자 데이터 저장 규칙을 정의합니다. 기본 Windows 데이터 정렬 규칙은 사전 정렬이 적용될 때 사용되는 알파벳이나 언어를 지정하고 비유니코드 문자 데이터를 저장하는 데 사용되는 코드 페이지도 지정합니다. 이진 데이터 정렬은 로캘 및 데이터 형식으로 정의된 코딩 값 시퀀스에 따라 데이터를 정렬합니다. SQL Server의 이진 데이터 정렬은 사용할 로캘과 ANSI 코드 페이지를 정의하며 이진 정렬 순서를 적용합니다. 이진 데이터 정렬은 비교적 간단하므로 응용 프로그램 성능 향상에 도움이 됩니다. 비유니코드 데이터 형식의 경우 데이터 비교는 ANSI 코드 페이지에 정의된 코드 포인트를 기준으로 수행됩니다. 유니코드 데이터 형식의 경우 데이터 비교는 유니코드 코드 포인트를 기준으로 수행됩니다. 유니코드 데이터 형식에서의 이진 데이터 정렬의 경우 데이터 정렬 시 로캘은 고려되지 않습니다. 예를 들어 Latin_1_General_BIN과 Japanese_BIN은 유니코드 데이터에서 사용할 때 동일한 정렬 결과를 생성합니다.

더 이전의 SQL Server 이진 데이터 정렬은 WCHAR로 첫 번째 문자를 비교한 후 바이트 단위 비교를 수행했으므로 SQL Server의 이전 이진 데이터 정렬은 유니코드 데이터에 대해 불완전한 코드 포인트 간 비교를 수행했습니다. 이전 버전과의 호환성을 위해 기존의 이진 데이터 정렬 의미 체계는 변경되지 않습니다.

이 SQL Server 릴리스의 이진 데이터 정렬에는 순수 코드 포인트 비교 데이터 정렬 집합도 포함되어 있습니다. 이진 데이터 정렬로 마이그레이션하면 진정한 코드 포인트 비교 기능을 활용할 수 있으며, 새 응용 프로그램을 개발할 때는 이진 데이터 정렬을 사용해야 합니다. BIN2 접미사는 코드 포인트 데이터 정렬 의미 체계를 구현하는 데이터 정렬 이름을 식별합니다. 새로운 이진 정렬에서 BIN2에 해당하는 비교 플래그를 사용할 수도 있습니다. 자세한 내용은 BIN 및 BIN2 데이터 정렬 사용 지침을 참조하십시오.

다음 표에서는 SQL Server에 대한 Windows 데이터 정렬 순서 옵션에 대해 설명합니다.

정렬 순서(접미사)정렬 순서 설명

이진(_BIN)1

각 문자에 대해 정의된 비트 패턴을 사용하여 SQL Server 테이블의 데이터를 정렬하고 비교합니다. 이진 정렬 순서는 대/소문자와 악센트를 구분합니다. 이진 정렬은 가장 빠른 정렬 순서입니다. 자세한 내용은 BIN 및 BIN2 데이터 정렬 사용 지침을 참조하십시오.

이 옵션을 선택하지 않으면 SQL Server는 관련된 언어 또는 알파벳에 대해 사전에 정의된 정렬 및 비교 규칙을 따릅니다.

이진 코드 포인트(_BIN2)1

유니코드 데이터에 대한 유니코드 코드 포인트를 사용하여 SQL Server 테이블의 데이터를 정렬하고 비교합니다. 비유니코드 데이터의 경우 이진 코드 포인트에서는 이진 정렬과 동일한 비교를 사용합니다.

이진 코드 포인트 정렬 순서 사용 시의 이점은 정렬된 SQL Server 데이터를 비교하는 응용 프로그램에서 데이터를 재정렬할 필요가 없다는 점입니다. 결과적으로 이진 코드 포인트 정렬 순서를 사용하면 응용 프로그램을 더 간단하게 개발할 수 있으며 성능이 향상될 수 있습니다. 자세한 내용은 BIN 및 BIN2 데이터 정렬 사용 지침을 참조하십시오.

대/소문자 구분(_CS)

대/소문자를 구분합니다. 이 정렬 순서를 선택하면 소문자가 대문자보다 먼저 정렬됩니다.

이 옵션을 선택하지 않으면 SQL Server는 정렬할 때 대문자와 소문자가 동일한 것으로 간주합니다.

악센트 구분(_AS)

악센트가 있는 문자와 악센트가 없는 문자를 구분합니다. 예를 들어 'a'는 'ấ'와 같지 않습니다.

이 옵션을 선택하지 않으면 SQL Server는 정렬할 때 악센트가 있는 문자와 악센트가 없는 문자가 동일한 것으로 간주합니다.

가나 구분(_KS)

일본어 가나 문자의 두 가지 유형인 히라가나와 가타가나를 구분하도록 지정합니다.

이 옵션을 선택하지 않으면 SQL Server는 정렬할 때 히라가나와 가타가나가 동일한 것으로 간주합니다.

전자/반자 구분(_WS)

같은 문자라도 싱글바이트 문자와 더블바이트 문자를 구분합니다.

이 옵션을 선택하지 않으면 SQL Server는 정렬할 때 싱글바이트와 더블바이트로 표시된 같은 문자를 동일한 것으로 간주합니다.

1 이 옵션을 선택하면 대/소문자 구분, 악센트 구분, 일본어 가나 구분 및 전자/반자 구분 옵션을 사용할 수 없습니다.

각 Windows 데이터 정렬은 일련의 접미사를 조합하여 대/소문자, 악센트, 일본어 가나, 전자/반자 구분 여부를 정의합니다. 다음 예에서는 다양한 접미사 조합에 대한 정렬 순서 동작에 대해 설명합니다.

Windows 데이터 정렬 접미사정렬 순서 설명

_BIN1

이진 정렬

_BIN21

이진 코드 포인트 정렬 순서

_CI_AI

대/소문자 구분 안 함, 악센트 구분 안 함, 일본어 가나 구분 안 함, 전자/반자 구분 안 함

_CI_AI_KS

대/소문자 구분 안 함, 악센트 구분 안 함, 일본어 가나 구분, 전자/반자 구분 안 함

_CI_AI_KS_WS

대/소문자 구분 안 함, 악센트 구분 안 함, 일본어 가나 구분, 전자/반자 구분

_CI_AI_WS

대/소문자 구분 안 함, 악센트 구분 안 함, 일본어 가나 구분 안 함, 전자/반자 구분

_CI_AS

대/소문자 구분 안 함, 악센트 구분, 일본어 가나 구분 안 함, 전자/반자 구분 안 함

_CI_AS_KS

대/소문자 구분 안 함, 악센트 구분, 일본어 가나 구분, 전자/반자 구분 안 함

_CI_AS_KS_WS

대/소문자 구분 안 함, 악센트 구분, 일본어 가나 구분, 전자/반자 구분

_CI_AS_WS

대/소문자 구분 안 함, 악센트 구분, 일본어 가나 구분 안 함, 전자/반자 구분

_CS_AI

대/소문자 구분, 악센트 구분 안 함, 일본어 가나 구분 안 함, 전자/반자 구분 안 함

_CS_AI_KS

대/소문자 구분, 악센트 구분 안 함, 일본어 가나 구분, 전자/반자 구분 안 함

_CS_AI_KS_WS

대/소문자 구분, 악센트 구분 안 함, 일본어 가나 구분, 전자/반자 구분

_CS_AI_WS

대/소문자 구분, 악센트 구분 안 함, 일본어 가나 구분 안 함, 전자/반자 구분

_CS_AS

대/소문자 구분, 악센트 구분, 일본어 가나 구분 안 함, 전자/반자 구분 안 함

_CS_AS_KS

대/소문자 구분, 악센트 구분, 일본어 가나 구분, 전자/반자 구분 안 함

_CS_AS_KS_WS

대/소문자 구분, 악센트 구분, 일본어 가나 구분, 전자/반자 구분

_CS_AS_WS

대/소문자 구분, 악센트 구분, 일본어 가나 구분 안 함, 전자/반자 구분

1 BIN 또는 이진 코드 포인트를 선택하면 대/소문자 구분, 악센트 구분, 일본어 가나 구분 및 전자/반자 구분 옵션을 사용할 수 없습니다.


MS-SQL / SQL Server

데이터베이스 파일크기 확인하기


쿼리분석기로 해당 서버에 연결한다음 

  

USE 데이터베이스명 

GO 

sp_spaceused 

GO 

를 실행하시면 현재 데이터베이스의 크기 정보를 알 수 있습니다. 

  

P.S> 

현재 트랜잭션 로그 사용량 

DBCC SQLPERF(LOGSPACE) 

  

현재 데이터베이스 파일별 크기 

sp_helpfile 

MS-SQL / SQL Server

Temp DB 저장위치 변경


성능을 위해 Temp DB는 별도의 디스크에 구축해 놓는것이 좋다는 것 알고계시죠?

그런데, SQL을 설치할때 그 부분을 깜박하고 설치해 버리는 경우가 종종 발생합니다.

그런 경우에 Temp DB의 물리적 위치를 수정해야 하는데 그 때 사용하는 방법입니다.

 

1. 먼저 Temp DB의 현재 정보를 알아내야 겠죠?

select database_id,name,physical_name from sys.master_files where database_id=2

위에서 Temp DB의 mdf,ldf파일의 논리적이름을 확인할 수 있습니다.

 

2. 바꿀 경로로 수정합니다.

alter database tempdb

modify file(name=templog,filename="F:\TempDB\tempdb.ldf")

alter database tempdb

modify file(name=tempdev,filename="F:\TempDB\tempdb.mdf")

 

3. 재부팅

쿼리를 실행시키면 재부팅시켜야 적용한다고 나옵니다. 상관없다면 바로 재부팅해도 되겠지만 대부분 바로 재부팅은 힘들겠죠? 나중에 한가한 시간대나 정기점검시간에 재부팅 시켜주면 되겠습니다.

쿼리를 실행했을때 아래와 같은 에러가 나왔을때..

 

Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.

 

문제의 쿼리 윗부분에..

 

Set ANSI_NULLS ON
Go

 

위의 부분을 추가해서 같이 실행한다.

좀 더 자세한 사항은

 

http://support.microsoft.com/kb/296769/en-us

 

을 참고...

MS-SQL / SQL Server

해외 IP 접속에 대한 개발 건 - GeoIP 


첨부파일의 csv 는 웹에서 검색하여 찾아낸 IP 국가별 대역으로 유상으로 업그레이드 해주는 해외 사이트가 있습니다. 이 파일은 아마도 최근 업그레이드 되지 않은 기본 파일인듯 합니다. GeoIP 라는 이름으로 알려져 있습니다.

 

1. DB 구성(MSSQL 예제)

 

CSV를 MSSQL에서 import 합니다.

DB 구성은 아래의 구성에 , 구분자에 의해 합니다.

csv 중 한 레코드 -> 58.29.0.0,58.29.255.255,974979072,975044607,KR,Korea, Republic of

파일을 분석해 보면 시작IP, 종결IP, 시작IP 10진수 표현, 종결IP 10진수 표현, 국가코드 , 상세 등입니다.

 

2. 이제는 펑션을 하나 만듭니다. 엔드유저의 IP에 대해 비교를 위한 10진수 전환이 필요 합니다.

아마도 이부분이 핵심이 아닌가 합니다.

 

create function [dbo].[FN_IPConvert] (@ipaddr as varchar(50)) returns bigint as

begin

declare @c1 varchar(50) , @c2 varchar(50) , @c3 varchar(50) , @c4 varchar(50)

declare @ipaddr1 varchar(50)

set @c1 = ''

set @c2 = ''

set @c3 = ''

set @c4 = ''

set @ipaddr1 = ''

select @c1 = substring(@ipaddr,0,Charindex('.',@ipaddr,0))

select @ipaddr1 = replace(@ipaddr,@c1+'.','')

select @c2 = substring(@ipaddr1,0,Charindex('.',@ipaddr1,0))

select @ipaddr1 = replace(@ipaddr1,@c2+'.','')

select @c3 = substring(@ipaddr1,0,Charindex('.',@ipaddr1,0))

select @c4 = replace(@ipaddr1,@c3+'.','')

return (cast(@c1 as bigint)*256*256*256)+(cast(@c2 as bigint)*256*256)+(cast(@c3 as int)*256)+(cast(@c4 as bigint))

end

ip 대역중 각 클래스 별로 256 의 3승,2승,1승,0승을 곱하여 모두 더합니다. 이렇게 하면 256 진법상의 주소를 10진수로 표현한것과 같습니다.

 

3. 비교 프로시져 작성

 

제법 레코드수가 많으므로 국가코드에 인덱스를 지정한 후 'KR' 비교를 합니다. 본 예제는 한국 IP 가 아니면 액션을 취할 목적 이므로 한국을 비교 합니다. etc1,etc2,NN 은 각각 시작IP 10진수 표현, 종결IP 10진수 표현, 국가코드 필드 입니다. 즉, IP 주소는 비교상 난해 하므로 10진수로 변환하여 그 대역에 있는지를 비교하는 절차 입니다.

 

create procedure [dbo].[USP_iparea](@ipaddress as varchar(20)) as

select * from iparea where FN_IPConvert(@ipaddress) between 

cast (etc1 as bigint) and cast (etc2 as bigint) and NN = 'KR'

MS-SQL / SQL Server

GeoIP, IP2Location등의 비교를 위해서 IP주소를 숫자(bigint)형식으로 변경


declare @result bigint

declare @fdIP varchar(15)

set @fdIP = '122.208.20.106'


DECLARE @fdIP1 bigint, @fdIP2 bigint, @fdIP3 bigint, @fdIP4 bigint


SELECT @fdIP1 = PARSENAME(@fdIP, 4)

SELECT @fdIP2 = PARSENAME(@fdIP, 3)

SELECT @fdIP3 = PARSENAME(@fdIP, 2)

SELECT @fdIP4 = PARSENAME(@fdIP, 1)


SET @result = @fdIP1*(256*256*256)+@fdIP2*(256*256)+@fdIP3*(256)+@fdIP4

 

SELECT @result 

 

 

 

--- 혹은 이렇게 ---------------------------------------------------------------------------

 

SELECT 

IpAddr

, CONVERT(BIGINT,(PARSENAME(IpAddr, 4)))*(256*256*256)

+ CONVERT(BIGINT,(PARSENAME(IpAddr, 3)))*(256*256)

+ CONVERT(BIGINT,(PARSENAME(IpAddr, 2)))*(256)

+ CONVERT(BIGINT,(PARSENAME(IpAddr, 1))) AS IpNumber1)) AS IpNumber

FROM 

(

 SELECT '122.208.20.106' IpAddr

) A

MS-SQL / SQL Server

모든 사용자 테이블을 파일로 익스포트하기


데이터베이스에 있는 모든 사용자 테이블을 익스포트해서 파일로 만드는 스크립트로 각각의 테이블마다 하나씩 파일을 생성한다.

if exists(select name from sysobjects where name = 'BCP_out_AllTables')

  begin

    drop procedure BCP_out_AllTables

  end

GO

CREATE PROCEDURE BCP_out_AllTables

 @dbname   varchar(30),

 @path   varchar(50) = "C:\Temp"

AS

SET NOCOUNT ON

DECLARE @tablename   varchar(30)

DECLARE @cmdline  varchar(125)

DECLARE @ssql                   varchar(255)

DECLARE @tabcount  smallint

SELECT @tabcount = 0

EXEC ('USE ' + @dbname)

create table #dumptables ([name] varchar(255))

set @ssql = 'insert into #dumptables SELECT [name] from ' + @dbname + '..sysobjects where type = ''U'''

exec (@ssql)

DECLARE cnames  CURSOR FOR 

select [name] from #dumptables

OPEN cnames

FETCH NEXT FROM cnames INTO @tablename

WHILE (@@fetch_status <> -1)

BEGIN

 IF (@@fetch_status = -2)

 BEGIN

  FETCH NEXT FROM cnames INTO @tablename

  CONTINUE

 END

        

 PRINT 'Exporting table: ' + @tablename

 /* build commandline */

 -- Add "-S<servername>" for a remoteserver, terminator used = ~ (tilde), specify terminator after '-t', '-T' is used for trusted connection, 

 -- use -U<username> -P<password> for standard security

 SELECT @cmdline = 'bcp ' + @dbname + '..' + @tablename + ' out ' + @path + '\' + @tablename + '.dat -c -t~  -T'

 EXEC master..xp_cmdshell @cmdline--, NO_OUTPUT

 SELECT @tabcount = @tabcount + 1

 FETCH NEXT FROM cnames INTO @tablename

END

DEALLOCATE cnames

/* Print usermessage */

SELECT CONVERT(varchar(10),@tabcount) + ' tables from database '+ @dbname + ' exported to ' + @path

GO

sp_help "BCP_out_AllTables"

GO

+ Recent posts