[SQL] 모든 열은 'X'가 들어 SQL 서버 SELECT
SQL모든 열은 'X'가 들어 SQL 서버 SELECT
SQL Server 2008을 사용하여, 나는라는 테이블에 80 개 컬럼으로 테스트하고 난 푸라는 값을 찾으려면 말한다.
내가 할 수있는:
SELECT *
FROM testing
WHERE COLNAME = 'foo'
나는 모든 80 열을 조회하고 foo는이 80 열 중 하나에 포함되는 모든 결과를 반환 할 수 있습니다 것이 가능?
미리 감사드립니다.
해결법
-
==============================
1.첫 번째 방법 (테스트) IN을 사용하여 해당 변수를 사용하여 문자열 변수의 열 먼저 가져 오기 목록은 쉼표로 구분 한 다음은 '갑'을 검색 할 수 있습니다
첫 번째 방법 (테스트) IN을 사용하여 해당 변수를 사용하여 문자열 변수의 열 먼저 가져 오기 목록은 쉼표로 구분 한 다음은 '갑'을 검색 할 수 있습니다
첫 번째 문자열에 대한 열 및 다음 검색을 얻을 수있는 아래의 저장 프로 시저를 확인 :
DECLARE @TABLE_NAME VARCHAR(128) DECLARE @SCHEMA_NAME VARCHAR(128) ----------------------------------------------------------------------- -- Set up the name of the table here : SET @TABLE_NAME = 'testing' -- Set up the name of the schema here, or just leave set to 'dbo' : SET @SCHEMA_NAME = 'dbo' ----------------------------------------------------------------------- DECLARE @vvc_ColumnName VARCHAR(128) DECLARE @vvc_ColumnList VARCHAR(MAX) IF @SCHEMA_NAME ='' BEGIN PRINT 'Error : No schema defined!' RETURN END IF NOT EXISTS (SELECT * FROM sys.tables T JOIN sys.schemas S ON T.schema_id=S.schema_id WHERE T.Name=@TABLE_NAME AND S.name=@SCHEMA_NAME) BEGIN PRINT 'Error : The table '''+@TABLE_NAME+''' in schema '''+ @SCHEMA_NAME+''' does not exist in this database!' RETURN END DECLARE TableCursor CURSOR FAST_FORWARD FOR SELECT CASE WHEN PATINDEX('% %',C.name) > 0 THEN '['+ C.name +']' ELSE C.name END FROM sys.columns C JOIN sys.tables T ON C.object_id = T.object_id JOIN sys.schemas S ON S.schema_id = T.schema_id WHERE T.name = @TABLE_NAME AND S.name = @SCHEMA_NAME ORDER BY column_id SET @vvc_ColumnList='' OPEN TableCursor FETCH NEXT FROM TableCursor INTO @vvc_ColumnName WHILE @@FETCH_STATUS=0 BEGIN SET @vvc_ColumnList = @vvc_ColumnList + @vvc_ColumnName -- get the details of the next column FETCH NEXT FROM TableCursor INTO @vvc_ColumnName -- add a comma if we are not at the end of the row IF @@FETCH_STATUS=0 SET @vvc_ColumnList = @vvc_ColumnList + ',' END CLOSE TableCursor DEALLOCATE TableCursor -- Now search for `foo` SELECT * FROM testing WHERE 'foo' in (@vvc_ColumnList );
두번째 방법 SQL 서버에서는 다음 열을 가져올 수있는 객체의 ID를 사용하여 테이블의 객체 ID를 얻을 수 있습니다. 이 경우는 다음과 같이 될 것입니다 :
1 단계 : 테이블의 첫 번째 GET 개체 ID
select * from sys.tables order by name
2 단계 : 이제 테이블의 열을 얻고 그것에서 검색 :
select * from testing where 'foo' in (select name from sys.columns where object_id =1977058079)
참고 : OBJECT_ID는 중요한 테이블에 대한 첫 번째 단계에서 가져 오기 무엇을 얻을
-
==============================
2.당신은에서 사용할 수 있습니다 :
당신은에서 사용할 수 있습니다 :
SELECT * FROM testing WHERE 'foo' in (col1, col2, col3, . . . );
-
==============================
3.나는이 그것을하는 가장 좋은 방법 중 하나라고 생각
나는이 그것을하는 가장 좋은 방법 중 하나라고 생각
SELECT * FROM sys.columns a inner join ( SELECT object_id FROM sys.tables where type='U'--user table and name like 'testing' ) b on a.object_id=b.object_id WHERE a.name like '%foo%'
-
==============================
4.당신은에서 사용할 수 있으며 동적으로 열 이름을 얻고 SQL 문자열을하고 sp_executesql을 실행 사용하여 실행하여 IN 절에 전달할 수 있습니다.
당신은에서 사용할 수 있으며 동적으로 열 이름을 얻고 SQL 문자열을하고 sp_executesql을 실행 사용하여 실행하여 IN 절에 전달할 수 있습니다.
declare @sql nvarchar(2100) declare @cols nvarchar(2000) declare @toSearch nvarchar(200) declare @tableName nvarchar(200) set @tableName = 'tbltemp' set @toSearch = '5' set @cols =( SELECT LEFT(column_name, LEN(column_name) - 1) FROM ( SELECT column_name + ', ' FROM INFORMATION_SCHEMA.COLUMNS where table_name = @tableName FOR XML PATH ('') ) c (column_name ) ) set @sql = 'select * from tbltemp where '''+ @toSearch + ''' in (' + @cols + ')'; execute sp_executesql @sql
-
==============================
5.나는 ubaid 라프의 대답에서 아이디어를했다,하지만 실제로 작업을했다. 그냥 여기 MyTableName을 변경 :
나는 ubaid 라프의 대답에서 아이디어를했다,하지만 실제로 작업을했다. 그냥 여기 MyTableName을 변경 :
SELECT STUFF(( SELECT ', ' + c.name FROM sys.columns c JOIN sys.types AS t ON c.user_type_id=t.user_type_id WHERE t.name != 'int' AND t.name != 'bit' AND t.name !='date' AND t.name !='datetime' AND object_id =(SELECT object_id FROM sys.tables WHERE name='MyTableName') FOR XML PATH('')),1,2,'')
당신은 당신의 필요에 맞게 조정할와 (INT 'AND t.name! ='비트 '등 일부'! = t.name을 ')이 경우 열에서 추가하거나 제거 조건 수, 예를 들어, 't.name를! ='추가 고유 식별자 '오류의 int 데이터 형식 유형에 myvalue' '는 VARCHAR 값을 변환 할 때 변환이 실패 입지 않도록'..
그런 다음 (그렇지 않으면 작동하지 않았다)이 쿼리에 결과를 붙여 복사 :
SELECT * from MyTableName where 'foo' in (COPY PASTE PREVIOUS QUERY RESULT INTO HERE)
from https://stackoverflow.com/questions/28717868/sql-server-select-where-any-column-contains-x by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 SQL 서버 스칼라 반환 함수는 느린받을 수 있나요? (0) | 2020.06.04 |
---|---|
[SQL] JPA 기본 쿼리를 선택하고 캐스트 객체 (0) | 2020.06.04 |
[SQL] 어떻게 PostgreSQL을 테이블에 행을 계산 속도를합니까? (0) | 2020.06.04 |
[SQL] 삽입 등) (최대 + 1 문제 설정치 (0) | 2020.06.04 |
[SQL] JDBC 더비 드라이버를 찾을 수 없습니다 (0) | 2020.06.04 |