태그

2014년 12월 17일 수요일

ms sql 지정한 키가 사전에 없습니다. 해결방법

ms sql 2012에서 아래와 같은 메시지가 나오는 경우가 있다.


제목: mscorlib
------------------------------
지정한 키가 사전에 없습니다.
------------------------------


해결방법 : SP1 설치

2014년 12월 10일 수요일

MSSQL->ORACLE 연결 TNS 에러

제목: Microsoft SQL Server Management Studio
------------------------------
연결된 서버에 대한 연결 테스트에 실패했습니다.
------------------------------
추가 정보:
Transact-SQL 문 또는 일괄 처리를 실행하는 동안 예외가 발생했습니다. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
연결된 서버 "****"에 대한 OLE DB 공급자 "OraOLEDB.Oracle"의 데이터 원본 개체를 초기화할 수 없습니다.
연결된 서버 "****"의 OLE DB 공급자 "OraOLEDB.Oracle"이(가) 메시지 "ORA-12154: TNS:could not resolve the connect identifier specified"을(를) 반환했습니다. (Microsoft SQL Server, 오류: 7303)
도움말을 보려면 다음을 클릭하십시오: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=10.50.1600&EvtSrc=MSSQLServer&EvtID=7303&LinkId=20476
------------------------------
단추:
확인
------------------------------



해결 >>>
tnsnames.ora 파일에 문제가 있다.
MSSQL이 설치된 서버에 오라클 클라이언트 설치 경로
D:\oracle\product\10.2.0\client_1\NETWORK\ADMIN
여기 폴더에 tnsnames.ora 파일을 아래처럼 수정해준다.
연결이름=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=아이피)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=DEDICATED)
      (SERVICE_NAME=오라클SID)
    )
  )

2014년 12월 9일 화요일

Count rows for all tables 모든 테이블의 행 수 카운트


-- Count rows for all tables


모든 테이블의 행 수 카운트
SP_MSForEachTable 를 사용하면 간단하게 할 수 있다.




CREATE TABLE #counts
(
    table_name varchar(255),
    row_count int
)
EXEC sp_MSForEachTable @command1='INSERT #counts (table_name, row_count) SELECT ''?'', COUNT(*) FROM ?'
SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC
DROP TABLE #counts


--Ref from stack overflow.

QUOTED_IDENTIFIER


배치스케줄이 아래의 에러를 뱉으며 동작하지 않는다.


다음 사용자로 실행되었습니다: NT AUTHORITY\SYSTEM. 다음 SET 옵션의 설정이 잘못되어 DELETE이(가) 실패했습니다. 'QUOTED_IDENTIFIER'. SET 옵션을 인덱싱된 뷰 및/또는 계산 열에 대한 인덱스 및/또는 필터링된 인덱스 및/또는 쿼리 알림 및/또는 XML 데이터 형식 메서드 및/또는 공간 인덱스 작업과(와) 함께 사용할 수 있는지 확인하십시오. [SQLSTATE 42000] (오류 1934).  단계가 실패했습니다.


SET QUOTED_IDENTIFIER ON


설정을 넣으면 된다!


Identifier(식별자)를 "큰따옴표" 안에 넣으면 쓸 수 있다는 설정인데, OFF되어있다한들 이게 왜 문제가 된건지??

누가 나를 참조하는지

누가 나를 참조하는지




sp_fkeys TABLE_NAME


TABLE_NAME 은 참조 당하는 테이블을 써준다.


그럼 FK가 있는 테이블 리스트가 나온다.

2014년 12월 8일 월요일

sql delete from nested select



sql delete from nested select


join해서 delete할 대상을 구하기 위해 nested query를 사용할 때 주의해야한다.



declare @t1 table (n int)
insert @t1 values(1)
insert @t1 values(2)
insert @t1 values(3)


declare @t2 table (n int)
insert @t2 values(1)
insert @t2 values(2)
insert @t2 values(3)


--이렇게 하면 의도대로 3만 지워질까?
delete @t1
from (
   select *
   from @t1
  ) x
where x.n=3


--이렇게 하면?
delete @t2
from (
   select *
   from @t2
   where n=3
  ) x


select * from @t1
select * from @t2


--result:Nothing...!
--아무것도없다!



2014년 12월 7일 일요일

sql non overlapping random number


sql non overlapping random number
중복되지 않는 랜덤 값으로 채우기

ex) Fill random number from 0 to 15

declare @t int = 0
declare @tt table (n int)
while( (select count(n) from @tt) < 15)
begin
 set @t = floor(rand()*15) --Generate 0~15
 if @t not in (select n from @tt)
 begin
  insert into @tt values(@t)
 end
end

select n
from @tt