자바 응용 프로그램에 대한 검색을 만들어야합니다. 사용자가 현재보고있는 테이블과 제공하는 검색어를 기반으로 SQL 데이터베이스를 검색 할 수 있습니다. 나는 주어진 테이블의 모든 컬럼을 통해 루프 절차를 확인하고 모든 관련을 넣어 시도 그럼,주어진 테이블에 대한 동적 검색 열
SELECT * FROM <table name> WHERE CAST((SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table name>')
AS VARCHAR) LIKE '%<search term>%'
하지만 하위 쿼리는 하나 개 이상의 결과를 반환 : 처음에 나는이 같은 간단한 일을 할 거라고 이 같은 결과 테이블의 필드 :
CREATE PROC sp_search
@tblname VARCHAR(4000),
@term VARCHAR(4000)
AS
SET nocount on
SELECT COLUMN_NAME
INTO #tempcolumns
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tblname
ALTER TABLE #tempcolumns
ADD printed BIT,
num SMALLINT IDENTITY
UPDATE #tempcolumns
SET printed = 0
DECLARE @colname VARCHAR(4000),
@num SMALLINT
WHILE EXISTS(SELECT MIN(num) FROM #tempcolumns WHERE printed = 0)
BEGIN
SELECT @num = MIN(num)
FROM #tempcolumns
WHERE printed = 0
SELECT @colname = COLUMN_NAME
FROM #tempcolumns
WHERE num = @num
SELECT * INTO #results FROM @tblname WHERE CAST(@colname AS VARCHAR)
LIKE '%' + @term + '%' --this is where I'm having trouble
UPDATE #tempcolumns
SET printed = 1
WHERE @num = num
END
SELECT * FROM #results
GO
이 두 가지 문제가있다 : 첫째가 어떻게 든 무한 루프에 걸리면, 둘째 내가 @tblname에서 아무것도 선택하지 수 있다는 것입니다. 동적 SQL을 사용해 보았지만 그 결과를 얻는 방법이나 그것이 가능할 지 모르겠다.
이것은 내가 대학에서하는 임무를위한 것으로,이를 이해하려고 시도한이 시간이 지났습니다. 내가하고 싶은 일을 할 수있는 방법이 있습니까?
제쳐두고, 길이를 지정하지 않고'VARCHAR'라고 말하지 마십시오. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx –
이전에 크기가 선언 된 위치에서 해당 문제가 발생했습니다. 1,하지만 지금은 쓸모없는 코드로 고정했습니다. 아무도 그 함정에 빠지게하지 마라. – Logan