2015. 12. 10. 13:29

쿼리분석기 또는 SSMS로 로그인 하였을 때, 기본으로 설정한 DB가 문제가 발생될 경우 로그인이 불가능 하다.

뭐, 처음부터 설정하지 않으면 되지만..

이럴경우 아래와 같이 진행한다.


C:\Program Files\Microsoft SQL Server\80\Tools\Binn 까지 이동한다.


여기서 80은 SQL버젼임


SQL2000 : 80

SQL2005 : 90

SQL2008 : 100

SQL2012 : 110

SQL2014 : 120


Binn>osql -S .\인스턴스명 -U sa -P 1234(sa암호) -d master

1> sp_defaultdb 'sa', 'master' => 디폴터를 master변경

2> go

기본 데이터베이스를 변경했습니다.


1> exit


하지만, master가 문제가 생기면 방법이 없다.


Posted by 팔개
2015. 11. 24. 16:44

CREATE DATABASE로 DB를 생성하기 않고 해당 mdf파일만 있으면 아래와 같이 실행하면 된다.

실행하기전 모든 서비스를 닫고 아래의 쿼리를 실행한다.



-- SQL2000에서 동작(그런데, 2008에서도 동작한다.)

EXEC sp_attach_db @dbname = N'pubs',

   @filename1 = N'F:\DBFile\pubs.mdf'

 




-- SQL2008에서 동작 

CREATE DATABASE pubs ON

    (FILENAME = 'F:\DBFile\pubs.MDF')

FOR ATTACH;

GO

Posted by 팔개
2015. 7. 18. 22:10

출처 : http://abacus.tistory.com/category/SQL?page=1


참고 : MS-SQL 2005 버젼부터 사용가능


SELECT

       CASE WHEN nType = 0 THEN A.name ELSE '' END ProcName

,      CASE WHEN nType = 1 THEN b.name ELSE '' END ParaName

,      C.name +

       CASE   WHEN UPPER(C.name) IN ('CHAR','NCHAR','VARCHAR','NVARCHAR') THEN '(' +

CONVERT(VARCHAR(8), B.max_length) + ')'

                    ELSE ''

       END TypeName

,      REPLACE(D.Definition, char(10) + char(13) ,  char(10) + char(13) ) Script

FROM ( SELECT object_id, name, nType FROM sys.objects CROSS JOIN (SELECT 0 nType UNION ALL

SELECT 1) B) A

       LEFT OUTER JOIN sys.sql_modules D

             ON A.object_id = D.object_id

                    AND A.nType = 0

       LEFT OUTER JOIN sys.parameters B

             ON A.object_id = B.object_id

                    AND A.nType = 1

       LEFT OUTER JOIN sys.types C

             ON B.system_type_id = C.system_type_id

                    AND B.user_type_id = C.user_type_id

WHERE OBJECTPROPERTY(A.object_id, 'IsProcedure') = 1

       AND OBJECTPROPERTY(A.object_id, 'IsMSShipped') = 0

       AND    CASE WHEN nType = 1 THEN b.name ELSE '' END IS NOT NULL

ORDER BY A.name, nType, ISNULL(B.parameter_id, 0)





---------------------------------------------------------------------------------------------------------------




DECLARE @SqlVersion AS CHAR(4)

DECLARE @maxi AS INT , @maxj AS INT

DECLARE @i AS INT , @j AS INT

DECLARE @Output VARCHAR(4000),@description VARCHAR(4000)

 

CREATE TABLE #Tables  (id int identity(1, 1), Object_id int, name varchar(155), type varchar(20), [definition] varchar(MAX))

CREATE TABLE #Parameters (id int identity(1,1), name varchar(155), type Varchar(155))

 

--SQL 버전뽑기

IF (substring(@@VERSION, 1, 25 ) = 'Microsoft SQL Server 2005')

       SET @SqlVersion = '2005'

ELSE IF (substring(@@VERSION, 1, 26 ) = 'Microsoft SQL Server  2000')

       SET @SqlVersion = '2000'

ELSE

       SET @SqlVersion = '2005'

--웹타이틀

Print '<html>'

Print '<head>'

Print '<title>::' + DB_name() + '::</title>'

--스타일

PRINT '<style>'  

PRINT '             body {'

PRINT '             font-family:verdana;'

PRINT '             font-size:9pt;'

PRINT '             }'         

PRINT '             td {'

PRINT '             font-family:verdana;'

PRINT '             font-size:9pt;'

PRINT '             }'         

PRINT '             th {'

PRINT '             font-family:verdana;'

PRINT '             font-size:9pt;'

PRINT '             background:#d3d3d3;'

PRINT '             }'

PRINT '             table'

PRINT '             {'

PRINT '             background:#d3d3d3;'

PRINT '             }'

PRINT '             tr'

PRINT '             {'

PRINT '             background:#ffffff;'

PRINT '             }'

PRINT '      </style>'

PRINT '</head>'

PRINT '<body>'

SET NOCOUNT ON

 

IF @SqlVersion = '2000'

BEGIN

       INSERT INTO #Tables (Object_id, name, type, [definition]) VALUES (1,1,1,1) --2000 없어서패수

END

ELSE IF @SqlVersion = '2005'

BEGIN

       INSERT INTO #Tables (Object_id, name, type, [definition])

       SELECT OJ.object_Id,'[' + S.name + '].[' + OJ.name + ']' AS name

       ,CASE WHEN type = 'V' THEN 'View' WHEN type = 'U' THEN 'Table' WHEN type = 'P' THEN 'PROCEDURE' END,SM.definition

       FROM sys.sql_modules AS SM

       JOIN sys.objects AS OJ ON SM.object_id = OJ.object_id

       LEFT OUTER JOIN sys.schemas AS S ON OJ.schema_id = S.schema_id

       WHERE OJ.type = 'P' AND is_ms_shipped = 0

END

SET @maxi = @@rowcount

--SP 리스트

PRINT '<table border="0" cellspacing="0" cellpadding="0" width="550px" align="center"><tr><td colspan="3" style="height:50;font-size:14pt;text-align:center;"><a name="index"></a><b>Procedure Index</b></td></tr></table>'

PRINT '<table border="0" cellspacing="1" cellpadding="0" width="550px" align="center"><tr><th>Sr</th><th>Object</th><th>Type</th></tr>'

SET @i = 1

WHILE(@i <= @maxi)

BEGIN

       SELECT  @output =  '<tr><td align="center">' + Cast((@i) as varchar) + '</td><td><a href="#' + type + ':' + name + '">' + name + '</a></td><td>' + type + '</td></tr>'

       FROM #Tables WHERE id = @i

     

       PRINT @Output

       SET @i = @i + 1

END

PRINT '</table><br />'

--SP 쿼리문

PRINT '<table border="0" cellspacing="0" cellpadding="0" width="750px" style="table-layout:fixed;"><tr><td><b>Description</b></td></tr><tr><td>' + isnull(@description, '') + '</td></tr></table><br />'

SET @i = 1

WHILE(@i <= @maxi)

BEGIN

       --table header

       SELECT @Output =  '<tr><th align="left"><a name="' + type + ':' + name + '"></a><b>' + type + ':' + name + '</b></th><td align="right"><a href="#index">Index</a></td></tr>'

       , @description = [definition]

       FROM #Tables WHERE id = @i

     

       PRINT '<br /><br /><br /><table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td align="right"></td></tr>'

       PRINT @Output

       PRINT '</table><br />'

       --Parameters정보테이블넣기

       TRUNCATE table #Parameters

     

       IF @SqlVersion = '2000'

       BEGIN

             PRINT '' --2000 없어서패수

       END

       ELSE IF @SqlVersion = '2005'

       BEGIN

             INSERT INTO #Parameters (Name, Type)

             SELECT AP.name,type_name(user_type_id) +

             CASE WHEN (type_name(user_type_id) = 'varchar' or type_name(user_type_id) = 'nvarchar' or type_name(user_type_id) ='char' or type_name(user_type_id) ='nchar')

                           THEN '(' + cast(max_length AS VARCHAR) + ')'

                     WHEN type_name(user_type_id) = 'decimal'

                           THEN '(' + cast([precision] AS VARCHAR) + ',' + cast(scale AS VARCHAR)   + ')'

                    else ''

                    end  

             FROM sys.all_parameters AP

             INNER JOIN #Tables T on T.object_id = AP.object_id

             WHERE t.id = @i

       END

 

       SET @maxj =   @@rowcount

       SET @j = 1

 

       PRINT '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Procedure Prameters</b></td></tr></table>'

       PRINT '<table border="0" cellspacing="1" cellpadding="0" width="750px"><tr><th>Sr.</th><th>Name</th><th>Datatype</th></tr>'

     

       WHILE(@j <= @maxj)

       BEGIN

             SELECT @Output = '<tr><td width="20px" align="center">' + Cast((@j) AS varchar) + '</td><td width="150px">' + isnull(name,'')  + '</td><td width="150px">' +  upper(isnull(type,'')) + '</td></tr>'

                    from #Parameters  where id = @j       

             PRINT @Output     

             SET @j = @j + 1;

       END

       PRINT '</table><br />'

       --Parameters정보테이블끝

       --SP 쿼리

       PRINT '<table border="0" cellspacing="0" cellpadding="0" width="750px"><tr><td><b>Description</b></td></tr><tr><td style="word-break:break-all;"><pre>' + isnull(@description, '') + '</pre></td></tr></table><br />'

       --SP 쿼리끝

       SET @i = @i + 1

END

 

--Parameters정보테이블

SET @i = 1

WHILE(@i <= @maxi)

BEGIN

     

       SET @i = @i + 1

END

DROP Table #Tables

DROP Table #Parameters

 

 

Posted by 팔개
2015. 7. 18. 19:37

출처 : http://abacus.tistory.com/176


MS SQL 2000 에서 정보를 보는 쿼리들
 
해당 DB에 어떤 Table들이 있는지, Table이 변경되었는데 무엇이 변경되었는지, 해당 DB에 어떠한 프로시저들이있는지를 한 눈에 볼 수 있는 쿼리들이다.  아주 쬐금 유용하게 쓰인다. ^^;

 

 DB 목록 보기

--목록중에 시스템 데이터베이스는 제외시키기

Select

    [name]

  , [dbid]

From Master.dbo.sysdatabases

Where [name] not in ('master''tempdb''model''msdb')

Order by dbid

 

 

 DB에 존재하는 Table 목록 보기

Select

    [name]

From dbID명(ex:master).dbo.sysobjects Where [xtype] = 'U'

 

 

 Table 변경 사항 감지

Select

    [name]

 ,  [xtype]

 ,  [schema_ver]

From dbID명(ex:master).dbo.sysobjects

Where [xtype] = 'U'

   And [schema_ver] <> 0

   And [name] = '테이블명' 

컬럼 추가 : + 16

컬럼 삭제 : + 16

컬럼 수정

    ㄱ. 컬럼명 변경 : + 32

    ㄴ. 컬럼 타입 변경 : + 16

 

 

Table - Columns

Select

    b.name As Column_Name

  , c.name As data_type

  , b.length

  , b.isnullable

  , (Case When

        (Select Distinct(k.column_name)

          From Information_schema.key_column_usage AS k

          Where k.Table_name = A.nam And k.column_name = b.name

        ) Is Null Then 'N' Else 'Y' End

     As PK

From sys.sysobjects a

       Inner join syscolumns b On a.id = b.id

       Inner join systypes c On b.xtype = c.xtype

Where a.name = '테이블명'

Order BY a.name, b.name

 

-- 아래와같이 출력 된다.

-- 이 버전 말고 후에 다른 버전을 올릴 생각이다. 

 

  

Stored Procedure Query

--해당 DB의 모든 사용자 프로시저가 출력된다.

Select * From sysobjects Where type = 'P'

 

 

Stored Procedure 목록, Stored Procedure 내용

--해당 DB의 모든 사용자 프로시저 및 그 프로시저의 내용이 출력된다.

Select

    so.[name]
  , sc.[text]
From dbo.sysobjects As so Inner Join dbo.syscomments As Sc
On so.id = sc.id
Where so.[type] = 'P'

 

 

sysobject xtype 정의

C = Check 제약 조건

D = 기본값 또는 Default 제약 조건

F = Foreign Key 제약 조건

L = 로그

FN = 스칼라 함수

IF = 인라인 테이블 함수

P = 저장 프로시저

PK = Primary Key 제약 조건

RF = 복제 필터 저장 프로시저

S = 시스템 테이블

TF = 테이블 함수

TR = 트리거

U = 사용자 테이블

UQ = Unique 제약 조건

V = 뷰

X = 확정 저장 프로시저

--해당 정의는 MSSQL 2000에서 유용한것이고, 2005 부터는 type의 목록이 조금 추가가 되었다.

--또한 2005부터는 sysobject 가 아닌 sys.object 를 쓰기 바란다.

--sysobject 는 이전버전과 호환성을 위해 포함된 뷰이고

--sys.object는 sysobject를 대신하는 시스템뷰이다.

Posted by 팔개
2015. 4. 2. 13:01

USE AdventureWorks2008R2;

GO

IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL

DROP TABLE dbo.AWBuildVersion;

GO 




OBJECT_ID 함수 내의 dbo.AWBuildVersion은 사용할 개체를 의미하고,

U는 스키마 범위 개체 형식을 의미한다.

 

U는 테이블(사용자 정의)를 의미한다.

 

개체 유형:

AF = 집계 함수(CLR)

C = CHECK 제약 조건

D = DEFAULT(제약 조건 또는 독립 실행형)

F = FOREIGN KEY 제약 조건

FN = SQL 스칼라 함수

FS = 어셈블리(CLR) 스칼라 함수

FT = 어셈블리(CLR) 테이블 반환 함수

IF = SQL 인라인 테이블 반환 함수

IT = 내부 테이블

P = SQL 저장 프로시저

PC = 어셈블리(CLR) 저장 프로시저

PG = 계획 지침

PK = PRIMARY KEY 제약 조건

R = 규칙(이전 스타일, 독립 실행형)

RF = 복제 필터 프로시저

S = 시스템 기본 테이블

SN = 동의어

SO = 시퀀스 개체

SQ = 서비스 큐

TA = 어셈블리(CLR) DML 트리거

TF = SQL 테이블 반환 함수

TR = SQL DML 트리거

TT = 테이블 유형

U = 테이블(사용자 정의)

UQ = UNIQUE 제약 조건

V = 뷰

X = 확장 저장 프로시저

Posted by 팔개
2015. 1. 22. 03:15

-- 시스템테이블에수정을가능하게한다.

EXEC sp_configure 'allow updates', 1

RECONFIGURE WITH OVERRIDE

 

 

master DB sysxlogins 테이블에서 sa계정 삭제

 

-- 삭제전SA 계정을대신할최고권한을가진계정을생성한다(윈도우계정이있을경우상관없음)

 

DELETE FROM sysxlogins

WHERE name = 'sa'

 

-- 시스템테이블에수정을불가하게한다.

EXEC sp_configure 'allow updates', 0

RECONFIGURE WITH OVERRIDE

 

-- 확인

SELECT * FROM sysxlogins

Posted by 팔개
2015. 1. 17. 00:36

출처 : http://hackhyun.tistory.com/193


Windows 7 의 경우 : C:\Users\사용자\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin

'MS-SQL' 카테고리의 다른 글

OBJECT_ID를 이용한 객체유형 확인  (0) 2015.04.02
MS-SQL2000 sa 계정삭제  (0) 2015.01.22
SQL2000에서 에러처리 후 결과값 전달  (0) 2015.01.16
프로시져에 사용된 테이블 찾기  (0) 2014.12.28
MAX값 구하기  (0) 2014.12.26
Posted by 팔개
2015. 1. 16. 01:07

CREATE TABLE FIRSTTB(A CHAR(1))

CREATE TABLE SECONDTB(A CHAR(1))

CREATE TABLE THIRD(A VARCHAR(30))

 

BEGIN TRAN

       DECLARE @I INT

       SET @I = 5

       WHILE (@I <= 15)

       BEGIN

             INSERT INTO FIRSTTB VALUES(@I)

             IF(@@ERROR <> 0) GOTO _RollBack

            

             INSERT INTO SECONDTB VALUES('AA')

             IF(@@ERROR <> 0) GOTO _RollBack

       END

COMMIT TRAN

GOTO _DataSave

 

_RollBack:

 

IF @@TRANCOUNT > 0 BEGIN

       ROLLBACK TRAN

       INSERT INTO THIRD VALUES('에러발생')

END

RETURN

 

_DataSave:

RETURN

'MS-SQL' 카테고리의 다른 글

MS-SQL2000 sa 계정삭제  (0) 2015.01.22
SSMS 접속한 DB주소 지우기  (0) 2015.01.17
프로시져에 사용된 테이블 찾기  (0) 2014.12.28
MAX값 구하기  (0) 2014.12.26
컬럼명 찾기  (0) 2014.12.20
Posted by 팔개
2014. 12. 28. 14:01

출처 : http://aspdotnet.tistory.com/252


SELECT DISTINCT so.name

FROM syscomments sc

JOIN sysobjects so ON sc.id = so.id

WHERE sc.TEXT LIKE '%TBLNAME%'


'MS-SQL' 카테고리의 다른 글

SSMS 접속한 DB주소 지우기  (0) 2015.01.17
SQL2000에서 에러처리 후 결과값 전달  (0) 2015.01.16
MAX값 구하기  (0) 2014.12.26
컬럼명 찾기  (0) 2014.12.20
참조키 확인및 삭제  (0) 2014.12.20
Posted by 팔개
2014. 12. 26. 22:31

실행계획은 1번보다 2번이 좋다.



1. SELECT MAX(no) from TBLNAME

 

 

2. SELECT IDENT_CURRENT('TBLNAME') AS maxno





'MS-SQL' 카테고리의 다른 글

SQL2000에서 에러처리 후 결과값 전달  (0) 2015.01.16
프로시져에 사용된 테이블 찾기  (0) 2014.12.28
컬럼명 찾기  (0) 2014.12.20
참조키 확인및 삭제  (0) 2014.12.20
원단위 절삭/반울림  (0) 2014.07.23
Posted by 팔개