ユーザーが現在表示しているテーブルと提供されている検索用語に基づいてSQLデータベースを検索できる、作成中のJavaアプリの検索を作成する必要があります。最初は、次のような簡単なことをするつもりでした。
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
これには2つの問題があります。1つは、どういうわけか無限ループでスタックすることです。もう1つは、@tblnameから何も選択できないことです。動的SQLも使用してみましたが、それから結果を取得する方法や、それが可能かどうかさえわかりません。
これは私が大学でやっている任務のためであり、私はそれを理解しようと何時間も試みた後、これまでに得ました。私がやりたいことをする方法はありますか?