database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6382 게시물 읽기
No. 6382
mssql 2000 에서 top
작성자
노진광(kite20)
작성일
2012-06-08 11:23
조회수
7,158

 안녕하세요. 

제품 테스트중 msspl 2000 에서 에러가 발생하여 도움을 청합니다.

 

아래는 쿼리입니다. 

 

CREATE PROC SPHINX_LOOP_TEMP AS

DECLARE @count INT

SET @count = 1

WHILE (@count <= 2)

BEGIN

UPDATE top(1) sphinxtest1 SET SPHINX_TEMP_INDEX=@count where SPHINX_TEMP_INDEX='';

SET @count = (@count + 1);

END;

 

 

에러내용은 

top  키워드 근처의 구문이 잘못되었습니다. 

입니다. 

 

하려는 목적은 테이블에 SPHINX_TEMP_INDEX 컬럼을 생성 후  생성된 row  만큼 순차적으로 

 

수를 넣으려고합니다.  즉 index 를 잡기위해 컬럼을 만들고 값을 넣는 작업입니다. 

 

오라클 같으면 간단히  할수 있는데 mssql 은 어렵네요 위 쿼리는 2000  상위 버젼에선 동작을 합니다. 

 

2000에서 동작을 안하기에 지원을 안하는 것 같습니다. 

 

조언을 부탁 드립니다. 

 

 

 

 

 

 

이 글에 대한 댓글이 총 6건 있습니다.

 ALTER TABLE sphinxtest1 

ADD sptidx INT IDENTITY;
 
가 훨씬 쉬운 해결 방법 인 것으로 생각됩니다.
우욱님이 2012-06-08 15:05에 작성한 댓글입니다. Edit

  네 말씀하신 방법은 저도 해보았는데 

 

기존테이블에 IDENTITY 속성이 있으면 제거 후 

 

사용 해야 하는 문제가 있었습니다. 

 

혹시 테이블의 IDENTITY  속성을 가진 컬럼을 찾아 

 

이를 제거 했다가 다시 부여하는 쿼리가 있을까요??

 

노진광(kite20)님이 2012-06-08 16:13에 작성한 댓글입니다.

 PK(최소 UNIQUE)가 있다면

CREATE TABLE #idTmp(

seq int identity

, orgTblPK someDataType

)

식으로 만든 후에 기존 테이블의 pk를 때려 박은 후에 join으로 update 하시면 쉽게 하실 수 있지 않을까 생각이 듭니다.

우욱님이 2012-06-08 16:42에 작성한 댓글입니다. Edit

죄송해요! ~ 제가 하려는 작업의 설명이 좀 부족했네요..

저는 사용자가 어떤 테이블이올지 몰르는 상황에서 위 작업을해야하기때문에

별도의 PK 를 만들려는 거에요. 

PK 존재 유뮤와 컬럼명을 쿼리로 알수있다면 PK 가 없다면 

IDENTITY 속성으로 컬럼을 만들어 해결하고 있다면 님이 제안한 방법으로 하면 됩니다. 

PK 존재 유뮤와 있다면 컬럼명을 알수 있을까요?

 

 

 

노진광(kite20)님이 2012-06-11 11:11에 작성한 댓글입니다.

 테이블 이름 yourTableName 으로 PK 찾기

 

SELECT sc.name

FROM sysindexes ix

INNER JOIN sysobjects so ON ix.id = so.id

INNER JOIN sysobjects pk ON ix.name = pk.name AND pk.parent_obj = ix.id AND pk.xtype = 'PK'

INNER JOIN sysindexkeys ik ON ix.id = ik.id AND ix.indid = ik.indid

INNER JOIN syscolumns sc ON ik.id = sc.id AND ik.colid = sc.colid

WHERE so.name = 'yourTableName'

ORDER BY ik.keyno

;

 

 

그리고 identity 컬럼 찾기는

SELECT col.name as ColNm 

FROM sysobjects AS so

INNER JOIN syscolumns AS col ON so.id = col.id

WHERE so.type = 'U' AND so.name = 'yourTableName' AND COLUMNPROPERTY (so.id, col.name, 'IsIdentity') = 1

;

 

우욱님이 2012-06-11 17:14에 작성한 댓글입니다.
이 댓글은 2012-06-11 17:21에 마지막으로 수정되었습니다. Edit

 감사합니다. 위 방법으로 해결했습니다. ~

노진광(kite20)님이 2012-06-12 18:06에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6386시퀀스 문자열 증가 (A->B) [1]
초보
2012-06-20
7382
6385쿼리 조언 부탁드립니다. [2]
김종열
2012-06-18
7158
6383쿼리 질문입니다. [1]
정재훈
2012-06-08
6588
6382mssql 2000 에서 top [6]
노진광
2012-06-08
7158
6381MSSQL 2000 or MSSQL 2005 접속계정 패스워드 관리되는 파일, 레지 등등의 공간 [1]
최영호
2012-06-07
7670
6380날짜구간을 열로 구현하고 싶습니다. [5]
장성욱
2012-06-05
6967
6379sql_server가 갑자기 연결이 안되요?
김성호
2012-06-04
6362
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다