[SQL] 그것은 열 서수의 위치를 사용하여 SQL 서버 데이터를 선택할 수있다
SQL그것은 열 서수의 위치를 사용하여 SQL 서버 데이터를 선택할 수있다
이 테이블 열에 대한 ORDINAL_POSITION를 사용하여 열 데이터를 선택 할 수 있습니까? 나는 서수 위치를 사용하는 것이 나쁜 관행이지만 데이터 일회성 가져 오기 프로세스를 위해 내가 열 데이터를 얻을 수있는 서적 위치를 사용할 수 있어야합니다 알고 있습니다.
그래서 예를 들어,
create table Test(
Col1 int,
Col2 nvarchar(10)
)
사용하는 대신
select Col2 from Test
캔 I 쓰기
select "2" from Test -- for illustration purposes only
해결법
-
==============================
1.당신은 같은 것을해야 할 것
당신은 같은 것을해야 할 것
declare @col1 as varchar(128) declare @col2 as varchar(128) declare @sq1 as varchar(8000) select @col1 = column_name from information_schema.columns where table_name = 'tablename' and ordinal_position = @position select @col2 = column_name from information_schema.columns where table_name = 'tablename' and ordinal_position = @position2 set @sql = 'select ' + col1 ',' + col2 'from tablename' exec(@sql)
-
==============================
2.당신이 열의 양을 알고 있지만, 그 이름과 종류를 모르는 경우, 당신은 속임수를 사용할 수 있습니다 :
당신이 열의 양을 알고 있지만, 그 이름과 종류를 모르는 경우, 당신은 속임수를 사용할 수 있습니다 :
select NULL as C1, NULL as C2 where 1 = 0 -- Returns empty table with predefined column names union all select * from Test -- There should be exactly 2 columns, but names and data type doesn't matter
결과적으로 2 열 [C1]과 [C2]과 테이블을 가질 것이다. 당신이 당신의 테이블의 100 열이있는 경우이 방법은 매우 유용하지 않지만 컬럼의 작은 미리 정의 된 번호로 테이블에 적합합니다.
-
==============================
3.이 쿼리를 사용할 수 있습니다
이 쿼리를 사용할 수 있습니다
select * from information_schema.columns
열의 서수 위치를 얻을 수 있습니다. 마이클 하렌 쓴처럼, 당신은 당신이에 열 위치를 통과하는 것이 코드 또는 sproc에에 하나,이를 사용하여 동적 쿼리를 구축해야합니다.
FWIW, 이것은 순수한 악이다.
당신은 위치에 따라 일반 쿼리 w / 열 이름을 구축 할 것이기 때문에 또한, deathofrats 바로, 당신은 정말,이 작업을 수행 할 수있다.
-
==============================
4.예, 시스템 테이블에 정말 추한 안타로이 작업을 수행 할 수 있습니다. 당신은 아마 동적 SQL의 세계에 빠지다해야 할 것입니다.
예, 시스템 테이블에 정말 추한 안타로이 작업을 수행 할 수 있습니다. 당신은 아마 동적 SQL의 세계에 빠지다해야 할 것입니다.
난 정말, 정말이 방법을 사용하지 않는 것이 좋습니다.
그것이 당신을 억제하지 않은 경우, 다음이 당신이 (REF) 시작할 수 있습니다
select table_name, column_name, ordinal_position, data_type from information_schema.columns order by 1,3
-
==============================
5.아니, 당신은 내가 아는 한, 자신의 서수 위치에 따라 열을 선택할 수 없습니다.
아니, 당신은 내가 아는 한, 자신의 서수 위치에 따라 열을 선택할 수 없습니다.
은 Transact SQL 참조 볼 때, 당신을 제안하기 위해 아무것도 할 수 없다 (http://msdn.microsoft.com/en-us/library/ms176104(SQL.90).aspx).
-
==============================
6.당신이 열 수를 알고있는 경우, 하나의 방법은 컬럼의 수와 TMP 테이블에 데이터를 전송하고 임시 테이블에서 선택할 수 있습니다 ...
당신이 열 수를 알고있는 경우, 하나의 방법은 컬럼의 수와 TMP 테이블에 데이터를 전송하고 임시 테이블에서 선택할 수 있습니다 ...
declare @tmp table(field1 sql_variant, field2 int, field3 sql_variant) insert into @tmp select * from Test select field2 from @tmp
-
==============================
7.당신이 가지고있는 옵션 조건을 사용하고 있습니다 : 당신의 예에서 :
당신이 가지고있는 옵션 조건을 사용하고 있습니다 : 당신의 예에서 :
SELECT CASE YourColumnNumber WHEN "1" THEN Col1 WHEN "2" THEN Col2 ELSE "?" END AS Result FROM Test
내가 두려워 쿼리 스키마에가는 것은 속도가 느려집니다 ...
-
==============================
8.나는 당신이 할 수 있다고 생각하지 않습니다. @Michael 하렌이 보여, 당신은 ORDER BY 절에 서수 위치를 사용할 수 있지만 나는 그들이 SQL 서버에서 다른 곳에서 사용 본적이 없어.
나는 당신이 할 수 있다고 생각하지 않습니다. @Michael 하렌이 보여, 당신은 ORDER BY 절에 서수 위치를 사용할 수 있지만 나는 그들이 SQL 서버에서 다른 곳에서 사용 본적이 없어.
아마도 어떤 불행한 열 이름 - 당신이 함께 도움이 될 것으로 데이터 일회성 가져 오기가있는 아니에요 있는지 어떤 문제? 당신은 더 많은 조금 설명 할 수 있습니까?
-
==============================
9.나는 동적 SQL을 사용하여이 짧은을 할 수있는 방법을 알고하지 않습니다. 당신은 당신이 느끼는 이유에 대해 좀 더 정보를 포함 어쩌면 경우 당신은 당신에게 그 문제를 해결하기 위해 방법에 대한 조언을 제공 할 수 있습니다 여기에 서수 값 누군가를 사용해야합니다.
나는 동적 SQL을 사용하여이 짧은을 할 수있는 방법을 알고하지 않습니다. 당신은 당신이 느끼는 이유에 대해 좀 더 정보를 포함 어쩌면 경우 당신은 당신에게 그 문제를 해결하기 위해 방법에 대한 조언을 제공 할 수 있습니다 여기에 서수 값 누군가를 사용해야합니다.
편집 : 나는 다른 의견에 어느 정도이 대답 것을 알 수있다. 당신은 더 많은 세부 사항을 제공 할 수 있습니까? 가져 오기 시저 및 / 또는 테이블 정의?
-
==============================
10.당신이 MS SQL 2005를 사용하는 경우에는 ROW_NUMBER 기능을 사용할 수 있습니다.
당신이 MS SQL 2005를 사용하는 경우에는 ROW_NUMBER 기능을 사용할 수 있습니다.
SELECT COL1, Col2의, ROW_NUMBER () OVER (COL1 BY ORDER) 테스트 FROM WHERE ROW_NUMBER () @Position 및 @Position 사이 이상 (주문 BY COL1)
내가 제대로 질문을 읽고있다하면 그것은 당신에게 원하는 결과를 얻을 수 있습니다.
from https://stackoverflow.com/questions/368505/is-it-possible-to-select-sql-server-data-using-column-ordinal-position by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 반복, 컬럼 이름을 통하여 (0) | 2020.04.08 |
---|---|
[SQL] SQL의 모든 그룹의 선택 첫 행 [중복] (0) | 2020.04.08 |
[SQL] MySQL은 행의 집합에 누적 합계 (0) | 2020.04.08 |
[SQL] SELECT *에 대한 바로 가기가 FROM 있습니까? (0) | 2020.04.08 |
[SQL] 쉼표로 구분 된 목록의 MySQL의 항목을 계산하는 방법 (0) | 2020.04.08 |