'MySQL Workbench'을 사용하여 MySQL에 접속하여 작업하고 있습니다. 테이블을 업데이트를 하려고 명령을 날리니.... "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect." 이런 오류가.... 1. 원인 이건 디비의 문제가 아니라 툴 자체의 문제입니다. 툴에서 디비를 보호하기 위해 편집을 막는 경우가 있는데 이런 경우라고 할 수 있습니다. 2. 해결 방법 옵션을 꺼주면 됩니다. 끝! ... .... 해당 옵션은 E..
흠.... 간만에 서버에 MSSQL설치해야 해서 IDC센터에서 다해준다길례 해달라고 했습니다. 그런데..... 1.문제 'sa'계정으로 연결하려고 하니 앵? 윈도우 인증은 되는데 'SQL Server'인증이 안되는 겁니다 ㅡ,.ㅡ;;;;; 비밀번호를 내가 직접 넣었는데? 2. 해결 방법 로그인 안되는 것에 이유가 많습니다. 보통은 TCP가 허용됬는지 확인하고 방화벽을 열면되죠. 우리가 흔이 아는 이 내용은 물론 다 적용이 되어 있습니다. 보통 '윈도우 인증'은 되는데 'SQL 서버 인증'이 안된다면 원인은 한가지죠. 로그인의 '혼합 인증 모드'가 꺼저 있다는 것입니다!!!! 아..... 저는 MSSQL을 설치할때 혼합모드로 설정하고 설치하기 때문에 이런 문제를 볼 수 없던 것입니다-_-;; 다른 사람이 ..
데이터베이스는 버전 관리가 쉽지 않다는 문제가 있습니다. (물론 몇 가지 방법을 쓰면 불가능한 건 아닌데 일반적인 프로젝트 관리에 비하면....-_-;) 그래서 테스트DB와 실제DB와 차이가 크게 날 경우 저장 프로시저 같은 것들은 싹 날리고 생성하는 게 편합니다. 그 외에도 여러 가지 용도로 테이블이나 함수, 뷰 같은 것을 한 번에 지우기도 합니다. 1. 명령어 생성 저번 글에서 저장 프로시저나 테이블 같은 구성요소를 검색하는 방법을 알아봤습니다. (참고 : [MSSQL] MSSQL의 여러 구성요소 검색하기 - 'sys.objects') 검색 결과를 보면 이름이 출력되죠, 그러니 앞뒤로 쿼리를 붙여주면 우리가 원하는 동작을 하는 쿼리를 만들 수 있습니다. 예를 들면 테이블의 경우 'Drop Table'..
저장프로시저 안에서 다른 저장프로시저를 호출하려면 크게 보자면 2가지 방법이 있습니다. Exec(EXECUTE)나 sp_executesql를 이용하면 됩니다. (참고 : MSDN - sp_executesql 사용) 이 포스팅에서는 Exec(EXECUTE)만 다루 겠습니다. 1. 리턴값이 없을때 리턴값이 없으면 그냥 호출하면 됩니다. --Exec [저장프로시저 이름] --Exec [저장프로시저 이름] [매개변수1],[매개변수2],.... Exec TestSelect @temp 2.리턴값이 있을때 리턴값은 항상 int형이므로 인티저형의 변수를 하나 선언한후 값을 대입하는 방식으로 받습니다. --Exec [값을 받을 변수] = [저장프로시저 이름] [매개변수1],[매개변수2],.... Declare @nTem..
저장 프로시저를 호출했는데 결과가 여러 개 나온다는 것은 'Select'문이 여러 번 동작하거나 'return'값도 온다는 의미입니다. 1. 'select'와 'return' 구분하기 필요에 따라 'Select'로 리턴하는 값을 'Return'으로 바꾸면 됩니다. 셀랙트(Select)는 리턴(Return)과 달라 프로시저가 종료되지 않습니다. 그러니 셀랙트로 값을 리턴하면 셀랙트가 호출된 이후 뒤에 있는 코드들도 그대로 동작합니다. 셀랙트가 여러 개 있다면 결과도 여러 개 나옵니다. 만약 호출한 저장 프로시저의 셀랙트된 내용을 받고 싶지 않다면 방법이 없는 건 아닙니다. 테이블 변수나 임시 테이블을 이용하여 저장 프로시저의 내용을 받으면 셀랙트된 내용이 리턴되지 않습니다. (참고 : [MSSQL] 저장프..
저장 프로시저를 이용할 때 리턴되는 값은 크게 리턴(Return)과 셀랙트(Select)로 나눌 수 있습니다. 리턴은 int형만 가능하고 일반적으로 프로시저에 대한 응답(로그인 중이라면 로그인이 안 된 이유 같은 것들)용으로 많이 사용합니다. 셀랙트는 말 그대로 데이터(테이블)를 리턴하는 것이고요. 1. SQL 작성 리턴과 셀랙트를 구분 안 하는 경우도 있습니다만 구분해서 쓰면 처리하기도 편해지고 코드도 일관성 있어저서 좋습니다. --Return과 Select를 구분한 경우 Select 1 Return 2 --결과 --Select : 1 --Return : 2 --Return과 Select를 구분하지 않은 경우 Select 1 Return --결과 --Select : 1 --Return : null 일반..
이전 글에서 테이블 변수에 관해서 이야기했었습니다. 임시 테이블과 테이블 변수는 사용하는 방법 면에서는 별 차이가 없으나 성능상 차이가 있다고 합니다. 테이블 변수가 성능 면에서 더 유리하다고 하는데....직접 비교는 해보지 않아서 잘 모르겠습니다 ㅎㅎㅎ (참고 : [MSSQL] 저장프로시저에서 테이블(Table) 변수 사용하기 ) 1. 선언 선언 임시테이블이므로 크리에이트 테이블(Create Table)로 생성하면 됩니다. --리턴값을 받기위한 임시 테이블 --Create Table [생성할 테이블 이름] ( [컬럼명] [데이터형], ... , [컬럼명] [데이터형] ) Create Table #Result ( nIndex int , sName varchar(16) , sID varchar(16)) 2..
테이블 변수라는 것은 변수로 선언된 테이블을 말합니다. 셀랙트(Select)하여 받아온 데이터를 저장 프로시저(stored procedure)에서 처리할 때 사용합니다. 1. 선언 선언은 'table'로 하면 됩니다. Declare @Table table ( nIndex int , sName varchar(16) , sID varchar(16)) 2. 입력 입력은 인서트(Insert)를 이용하면 됩니다. Insert @Table Select * From tb_WebServiceTest Where intIndex = 45 이렇게 하면 셀랙트의 결과가 테이블 변수로 들어가게 되죠. 3. 사용 사용은 일반적인 테이블처럼 사용할 수 있습니다. 셀랙트뿐만 아니라 4대 천황도 사용할 수 있습니다. Select * ..
마이크로 소프트 오피스에 비지오(Visio)라는 프로그램이 포함되어 있습니다. (라이센스에 따라 없을수 있음.) 하지만 따로 설치 해야 하죠 ㅡ.-; 비지오는 강력한 다이어그램 작성툴로 마이크로 소프트 오피스계열과도 궁합이 잘맞는 편입니다. (이전버전들의 경우 좀 궁합이 안맞긴 했습니다만...지금은 괜찬은듯 하네요.) ERD라는 것은 개체-관계다이어그램(Entity-Relationship Diagram)을 말합니다. (참고 : 위키백과 - 개체-관계 모델 ) 이미 만들어진 데이터베이스의 ERD를 생성하는 툴은 몇가지가 있지만 비지오는 평상시에도 많이 사용하므로 비지오를 이용하여 생성하는 방법을 다루겠습니다. 여기서 사용된 비지오 버전은 'Miocrosoft Visio 2010' 입니다. 1. 템플릿 생성..
DB를 복원하고 나면 생기는 문제가 있습니다. 사용자계정에 로그인 계정이 연결이 안되있네 '로그인 없이'사용이라늬!! 인터페이스가 따로 지원이 안되니 쿼리를 날려서 연결해주어야 합니다. EXEC sp_change_users_login 'Update_One', '[DB사용자]', '[로그인 계정]' 명령을 사용하면 로그인 이름이 연결된것을 볼수 있습니다. 참쉽죠잉~