복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    3.이 쿼리를 사용할 수 있습니다

    이 쿼리를 사용할 수 있습니다

    select * from information_schema.columns
    

    열의 서수 위치를 얻을 수 있습니다. 마이클 하렌 쓴처럼, 당신은 당신이에 열 위치를 통과하는 것이 코드 또는 sproc에에 하나,이를 사용하여 동적 쿼리를 구축해야합니다.

    FWIW, 이것은 순수한 악이다.

    당신은 위치에 따라 일반 쿼리 w / 열 이름을 구축 할 것이기 때문에 또한, deathofrats 바로, 당신은 정말,이 작업을 수행 할 수있다.

  4. ==============================

    4.예, 시스템 테이블에 정말 추한 안타로이 작업을 수행 할 수 있습니다. 당신은 아마 동적 SQL의 세계에 빠지다해야 할 것입니다.

    예, 시스템 테이블에 정말 추한 안타로이 작업을 수행 할 수 있습니다. 당신은 아마 동적 SQL의 세계에 빠지다해야 할 것입니다.

    난 정말, 정말이 방법을 사용하지 않는 것이 좋습니다.

    그것이 당신을 억제하지 않은 경우, 다음이 당신이 (REF) 시작할 수 있습니다

    select table_name, column_name, ordinal_position, data_type
    from information_schema.columns
    order by 1,3
    
  5. ==============================

    5.아니, 당신은 내가 아는 한, 자신의 서수 위치에 따라 열을 선택할 수 없습니다.

    아니, 당신은 내가 아는 한, 자신의 서수 위치에 따라 열을 선택할 수 없습니다.

    은 Transact SQL 참조 볼 때, 당신을 제안하기 위해 아무것도 할 수 없다 (http://msdn.microsoft.com/en-us/library/ms176104(SQL.90).aspx).

  6. ==============================

    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. ==============================

    7.당신이 가지고있는 옵션 조건을 사용하고 있습니다 : 당신의 예에서 :

    당신이 가지고있는 옵션 조건을 사용하고 있습니다 : 당신의 예에서 :

        SELECT 
         CASE YourColumnNumber 
          WHEN "1" THEN Col1
          WHEN "2" THEN Col2
          ELSE "?"
         END AS Result
        FROM Test
    

    내가 두려워 쿼리 스키마에가는 것은 속도가 느려집니다 ...

  8. ==============================

    8.나는 당신이 할 수 있다고 생각하지 않습니다. @Michael 하렌이 보여, 당신은 ORDER BY 절에 서수 위치를 사용할 수 있지만 나는 그들이 SQL 서버에서 다른 곳에서 사용 본적이 없어.

    나는 당신이 할 수 있다고 생각하지 않습니다. @Michael 하렌이 보여, 당신은 ORDER BY 절에 서수 위치를 사용할 수 있지만 나는 그들이 SQL 서버에서 다른 곳에서 사용 본적이 없어.

    아마도 어떤 불행한 열 이름 - 당신이 함께 도움이 될 것으로 데이터 일회성 가져 오기가있는 아니에요 있는지 어떤 문제? 당신은 더 많은 조금 설명 할 수 있습니까?

  9. ==============================

    9.나는 동적 SQL을 사용하여이 짧은을 할 수있는 방법을 알고하지 않습니다. 당신은 당신이 느끼는 이유에 대해 좀 더 정보를 포함 어쩌면 경우 당신은 당신에게 그 문제를 해결하기 위해 방법에 대한 조언을 제공 할 수 있습니다 여기에 서수 값 누군가를 사용해야합니다.

    나는 동적 SQL을 사용하여이 짧은을 할 수있는 방법을 알고하지 않습니다. 당신은 당신이 느끼는 이유에 대해 좀 더 정보를 포함 어쩌면 경우 당신은 당신에게 그 문제를 해결하기 위해 방법에 대한 조언을 제공 할 수 있습니다 여기에 서수 값 누군가를 사용해야합니다.

    편집 : 나는 다른 의견에 어느 정도이 대답 것을 알 수있다. 당신은 더 많은 세부 사항을 제공 할 수 있습니까? 가져 오기 시저 및 / 또는 테이블 정의?

  10. ==============================

    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)

    내가 제대로 질문을 읽고있다하면 그것은 당신에게 원하는 결과를 얻을 수 있습니다.

  11. 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