ms-sql 키를 지정된 상태에서 사용하기에 부적합합니다

2023. 9. 20. 09:54

https://hsmtree.wordpress.com/2015/07/01/sql-server-management-studio-ssms-%EB%93%B1%EB%A1%9D%EB%90%9C-%EC%84%9C%EB%B2%84-%EC%98%A4%EB%A5%98/comment-page-1/

 

SQL Server Management Studio (SSMS) 등록된 서버 오류

SQL Server Management Studio를 사용해 여러 사이트의 데이터베이스를 관리하다 보면, ‘등록된 서버’ 패널을 사용하는 경우가 많습니다. 이 기능으로 인해 사이트 관리 뿐만아니라 DB계정 정보를 통

hsmtree.wordpress.com

 

사무실 pc를 교체하면서 ssm를 다시 설치하고 기존 서버 정보를 한 번에 옮기려고 했다가,

옮겨지지는 않고 ssm 켤 때마다 '키를 지정된 상태에서 사용하기에 부적합합니다' 라는 경고창이 떠서

다시 싹 밀고 다시 깔았는데도 불구하고 경고창은 그대로..

구글에서 검색해서 나오는 방법1.

Crypto 폴더에 RSA 폴더 삭제 혹은 변경하라는 방법은 작동을 안 됐다..

방법 2.

%appdata%\Roaming\Microsoft\Microsoft SQL Server\100\Tools\ 경로 내의 Shell 폴더의 이름을 변경

이것도 안 됐다..

 

C:\Users\사용자계정\AppData\Roaming\Microsoft\SQL Server Management Studio\RegSrvr.xml

RegSrvr.xml

 위 파일 삭제하니 드디어 정상적으로 켜졌다..

텍사스양 일상에서

mssql - while문을 이용한 구구단

2015. 3. 18. 11:11

-----------구구단 전체--------------
Declare 
@a		int, 
@b		int, 
@99dan	int

SET @b	= 2
SET @99dan = 2

Print '구구단 시작'

While @99dan < 10
Begin
	set @a = 1

	while @a < 10
	begin
		print str(@b) + ' x ' + str(@a) + ' = ' + str(@b*@a)
		set @a = @a + 1
	end

	print ''
	SET @99dan = @99dan + 1
	SET @b = @b + 1
End 

Print '구구단 끝'


텍사스양 일상에서

mssq에서 exec로 결과값 출력하기(output)

2013. 6. 20. 14:32

 

-- 프로시저 생성구문 
CREATE PROCEDURE 프로시저名
 @SiteCD varchar(10)   
 @result int output 
AS 
SET NOCOUNT ON 

...

중간생략

...

 

 

위와 같이 프로시저를 생성 후,

결과 값을 확인하고 싶을 경우가 생기는데,

exec 프로시저名 '변수값' , ''

이렇게 확인을 하면,

'명령이 완료되었습니다.' 라고만 나오고,

무슨 값이 출력되는지 알 수가 없다..

 

이럴 경우에

확인할 Output 값을 미리 설정후에

아래와 같이 실행시키면,

 

Declare
@result int
exec 프로시저名 '변수값' , @result output
print @result

 

이런 식으로 실행하면,

결과 값이 화면에 출력되어 어떤 값을 반환했는지 바로 확인 가능하다..

 

텍사스양 일상에서

데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.

2011. 10. 28. 13:45


분명 int형이 아닌 varchar형으로 값을 받아왔는데도 불구하고,
프로시저를 실행시켰을 때,
데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.
라는 오류가 발생하여 며칠을 고생했다..

간단하게 표현하면 다음과 같은 로직..

Create   PROCEDURE [dbo].[프로시저 명]          
  @start VARCHAR(255),
  @end VARCHAR(255)               -- 시작 값과 끝 값을 varchar로 받는다..

while (@start <= @end)             --시작 값이 마지막 값과 같아질 때까지 돌자.
     Insert into 테이블명 (시작값 )
               values   (@start )      --지정한 테이블에 시작 값 입력..
    Set @start = @start + 1        --시작 값에 +1 추가


이런식으로 아무 문제없이 작동하던 프로시저가 난관에 봉착..
받아와야 하는 시작 값이  24136965000, 마지막 값이 24136965010 이 되자,
데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.
라는 오류를 뱉어내는 것이다..

DB에서 실행하면 그나마 중지라도 시키지..
웹상에서 실행되면 무한으로 돌며 중지도 안되고,
결국, 실 DB서버 CPU를 100%를 만들어버리는 어처구니 없는 일이 발생..

뭐지? 뭐지? 난 int형을 받지 않았는데??

그래서 먼저 int형에 대해 확인 했다..
- 2147483648 ~ 2147483647 (int형의 범위)

내가 등록하려는 값이 int형 범위를 벗어나긴 했다..
그래? 그럼 Bigint 형 쓰면 깔끔하게 해결되네..?
맞다.. 헌데, 받아오는 값이 '0'으로 시작할 때가 있어서 이것도 답이 되진 못했고..

암튼, 이런저런 삽질을 하다가
Set @start = @start + 1 -> 이 구문을 다음과 같이 변경..
Set @start = convert(bigint, @start) + 1

미션 해결..

아직도 varchar로 받은 값이 while 문을 돌며 int형으로 잡히는지 모르겠지만,
이런식의 해결도 있으니 참고하면 좋을 듯..

텍사스양 일상에서

MySql에서 MsSql로 디비이전할 때 날짜 변환..

2008. 12. 31. 13:55


MySql에서 덤프를 받아보면 날짜부분이
'1087445413' 이런 식으로 숫자가 나열되어있다..
이유는
MySQL에서 사용하는 Unix Time 자료형은 1970년 1월 1일부터의 시간을 초단위로 표현한 형태라고 한다..

따라서,
아래와 같이 select 해주면
select DATEADD(second, 1087445413,'1970-01-01')

2004-06-20 12:44:51.000
위와같이 변환되어 보인다..

위 내용을 알고 테이블에 전부 집어 넣고 select 해보면
select DATEADD(second, signdate[날짜컬럼이 들어감],'1970-01-01')
from 테이블명

'dateadd 함수의 인수 2에 대한 인수 데이터 형식 varchar이(가) 잘못되었습니다.'
위와같은 에러문구가 떠서 난감하게 만든다..

이럴 땐!
아래와 같이 int 형으로 convert 해주자..
select DATEADD(second, convert(int, signdate[날짜컬럼이 들어감]),'1970-01-01')
from 테이블명
(second는 줄여서 s로 써도 됨)


텍사스양 일상에서