태그

2014-12-18

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

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


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


해결방법 : SP1 설치

2014-12-11

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-10

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되어있다한들 이게 왜 문제가 된건지??

2014-12-09

누가 나를 참조하는지

누가 나를 참조하는지




sp_fkeys TABLE_NAME


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


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

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-08

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