name 명은 실제 서비스 DB 이름이라 삭제 하였고 owner 즉 소유자가 ~~UNKNOWN~~ 인걸 알수 있다.
이렇게 되어 있는 DB 를 마우스 오른쪽를 이용하여 속성을 보고자 할때 아래와 같은 Error 가 나면서 볼수 없다.
DB 속성 보기 Error
Property Owner is not available for Database '[DB명]'. This property may not exist for this object, or may not be retrievable due to insufficient access rights. (Microsoft.SqlServer.Smo)소유자 지정으로 해결
USE DB명
exec sp_changedbowner @loginame = 'sa'
안녕하세요.
블로그 잘 보고 있습니다. 항상 좋은 정보 감사.
다름이 아니라 ASP 페이징..
현재 프로시저로 짜고 있는데요. 막혀서 문의 합니다.
문제는 목록페이지 에서 페이징을 어떻게 처리를 해야 할지 난감합니다.
아래에 있는 [2.(쿼리 문) 리스트 목록] 부분을
3번 프로시저에서 표현해 주고 싶습니다.
혹시 알고 계시면 3번 프로시저 어떻게 작성할수 있는지 조언 좀 부탁합니다.
(참고 할수 있는 자료, 구문 등)부탁합니다.
* 환경 - MSSQL 2000 *
CREATE PROCEDURE [dbo].[page]
@Page [INT] , -- 페이지 번호
@PageSize [INT] , -- 글 출력 갯수 (EX:10개, 20개)
@SearchWord [NVARCHAR] (10) , -- 검색 필드 (이름, 제목, 내용)
@SearchString [NVARCHAR] (30) , -- 검색 내용 (홍길동)
@TotalRowCount [INT] OUTPUT -- 총 합계 변수
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON
SET @SearchString = '%' + @SearchString + '%'
--// 1.총 합계, 페이지수---------------------------------------
IF (@SearchWord = '' OR @SearchWord IS NULL OR @SearchString = '' OR @SearchString IS NULL)
BEGIN
SELECT @TotalRowCount = ISNULL(Count(*),0) FROM board
END
ELSE
BEGIN
SELECT @TotalRowCount = ISNULL(Count(*),0) FROM board
WHERE
(
CASE @SearchWord
WHEN 'name' Then name
WHEN 'title' Then title
WHEN 'text' Then text
END
)
LIKE @SearchString
END
--// 2.(쿼리 문) 리스트 목록---------------------------------------
SQL = "SELECT TOP " & pagesize & " * FROM board "
SQL = SQL & " WHERE " & column & " like '%" & searchString & "%' and Num not in "
SQL = SQL & "(SELECT TOP " & ((GotoPage - 1) * pagesize) & " Num FROM board"
SQL = SQL & " Where " & column & " like '%" & searchString & "%'"
SQL = SQL & " ORDER BY Num DESC) order by Num desc"
--// 3.리스트 목록---------------------------------------
SELECT *
FROM board
WHERE
(
CASE @SearchWord
WHEN 'name' Then name
WHEN 'title' Then title
WHEN 'text' Then text
ELSE
@SearchQuery
END
)
LIKE @SearchString
Order By Num Desc
GO
답글
이런식으로 하세요.
DECLARE @SQL VARCHAR(8000)
DECLARE @SearchWord VARCHAR(100)
DECLARE @pagesize INT
DECLARE @GotoPage INT
DECLARE @searchString VARCHAR(100)
SET @pagesize = 10
SET @GotoPage = 1
SET @SearchWord = 'name'
SET @searchString = 'TEST'
SET @searchString = '%'+@searchString+'%'
--// 2.(쿼리 문) 리스트 목록---------------------------------------
SET @SQL = 'SELECT TOP ' + CONVERT(VARCHAR(20),@pagesize) + ' * FROM board '
SET @SQL = @SQL + ' WHERE name like '''+@searchString+''' and Num not in '
SET @SQL = @SQL + '(SELECT TOP ' + CONVERT(VARCHAR(20),( ( @GotoPage - 1 ) * @pagesize ))
+' Num FROM board'
IF @SearchWord = 'name'
BEGIN
SET @SQL = @SQL + ' Where name like '''+@searchString+''''
END
ELSE
IF @SearchWord = 'title'
BEGIN
SET @SQL = @SQL +' Where title like '''+@searchString+''''
END
ELSE
BEGIN
SET @SQL = @SQL +' Where text like '''+@searchString+''''
END
SET @SQL = @SQL +' ORDER BY Num DESC) order by Num desc'
PRINT @SQL
김경진 님 답변 정말 고맙습니다.
너무 감동~~ 완성해주셔서 너무 감사합니다.
어제, 하루종일 머리를 쫘 내도...ㅠㅠ
역시! 고수님은 틀려.. 정말 고맙습니다~
답글
안녕하세요.
김경진님..
프로시저 작성중.. 궁금한것이 있어서요. 죄송하지만 아래 코드 좀 봐주세요.
문의) 프로시저 코드를 줄일 수 있는 방법 좀 조언해 주세요.
IF (@SearchWord = '' OR @SearchWord IS NULL OR @SearchString = '' OR @SearchString IS NULL)
Begin
--/ 검색 컬럼 및 검색어 없는 경우 - 이전글/--
if Exists ( select * from address where idx < @intIdx )
Begin
select @intPrevIdx = max(idx) from address where idx < @intIdx
select @strPrevName = name from address where idx = @intPrevIdx
End
--/ 검색 컬럼 및 검색어 없는 경우 - 다음글/--
if Exists ( select * from address where idx > @intIdx )
Begin
select @intNextIdx = min(idx) from address where idx > @intIdx
select @strNextName = name from address where idx = @intNextIdx
End
End
ELSE
Begin
--/ 검색 컬럼 및 검색어 있는 경우 - 이전글/--
if Exists (
SELECT idx, title, day FROM ddress
WHERE
(
CASE @SearchWord
WHEN 'name' Then name
WHEN 'title' Then title
WHEN 'text' Then text
END
)
LIKE @SearchString AND idx < @intIdx
)
Begin
select @intPrevIdx = max(idx) from address where idx < @intIdx
select @strPrevName = name from address where idx = @intPrevIdx
End
--/ 검색 컬럼 및 검색어 있는 경우 - 다음글/--
if Exists (
SELECT idx, title, day FROM ddress
WHERE
(
CASE @SearchWord
WHEN 'name' Then name
WHEN 'title' Then title
WHEN 'text' Then text
END
)
LIKE @SearchString AND idx > @intIdx
)
Begin
select @intNextIdx = min(idx) from address where idx > @intIdx
select @strNextName = name from address where idx = @intNextIdx
End
End
답글
특별히 줄일께 없어 보입니다.^^
답글
답변 감사합니다.
즐거운 하루 되세요.
답글
안녕하세요.
궁금해서 질문 올립니다.
글을 어떻게 써야 할지 몰라..죄송합니다.
많은 분들이 프로시저 생성 후 ASP 에서 "ADODB.Command"객체 사용하면 시간(분/초)및 부하가 많이 단축 되다고 하는데.
막상 테스트 해보니, 페이징은 오히려 ASP 페이지 에서 바로 날쿼리 돌리는 것이 효과적인것 같습니다.
1)프로시저 페이징 쿼리 생성 (동적 쿼리) -> ASP 에서 "ADODB.Command"객체 사용
2)ASP 페이지 에서 바로 날쿼리 돌림.
-> 비교시 오히려 2번이 시간(분/초) 5 ~ 7배 빠름.. 미치겠다.
질문1)몇 몇 공개된 소스를 봐도 목록(리스트) 부분은 ASP 페이지에서 바로 날쿼리로 돌림.. 이유가 있나요?
질문2)프로시저에서 페이징 부분을 정적 쿼리문으로 생성 가능한가요?
(정적으로 생성하고 싶어도 -> SELECT TOP () <- 이부분에서 계속 오류가 발생..ㅠㅠ)
질문3)현장에서는 예를들어 게시판 목록 부분을 어떻게 처리하는지 궁금합니다.
조언좀 부탁합니다.
답글
우선 SQLER 에 있는 http://www.sqler.com/332104 참고 한번 해보세요
sp_executesql 를 사용해서 Perpared 로 사용하고 계신가요.
그리고 속도 비교는 어떻게 비교 하신건가요. SQL 프로파일러로 혹시 비교해보신건가요.
답글
김경진님..
답변 정말 감사합니다.
역시 대단하세요.. 어떻게 문제가 있는 부분을 아셔죠?
그리고 참고 할수 있는 예제. 고맙습니다. ^^
답글