2013-07-26 3 views
7

SQL의 열 수로 특정 열을 선택할 수 있습니까?SQL 서버 숫자로 열 선택

SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE 

감사

+2

확인 http://stackoverflow.com/questions/368505/is-it-possible-to-select-sql-server-data-using-column-ordinal-position –

+1

답변을 확인하십시오. http://stackoverflow.com/a/4883109/1504882 – Elias

+0

여기 완벽하게 답변하여 질문에 대한 비슷한 질문입니다 : http://stackoverflow.com/questions/4882837/access-columns-of-a-table-by- index-of-name-in-sql-server-stored-procedure – Karamafrooz

답변

3

당신은이 같은 TRANSACT SQL 문을 작성해야합니다 이렇게하려면 동적 SQL을 사용하십시오 :

DECLARE @strSQL AS nvarchar(MAX) 
DECLARE @strColumnName AS nvarchar(255) 
DECLARE @iCounter AS integer 
DECLARE @curColumns AS CURSOR 


SET @iCounter = 0 
SET @strSQL = N'SELECT ' 

SET @curColumns = CURSOR FOR 
(
    SELECT * FROM 
    (
     SELECT TOP 99999 
      COLUMN_NAME 
     FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_NAME = 'T_Markers' 
     AND ORDINAL_POSITION < 4 
     ORDER BY ORDINAL_POSITION ASC 
    ) AS tempT 
) 

OPEN @curColumns 
FETCH NEXT FROM @curColumns INTO @strColumnName 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    -- PRINT @strColumnName 
    IF @iCounter = 0 
     SET @strSQL = @strSQL + N' 
    [' + @strColumnName + N'] ' 
    ELSE 
     SET @strSQL = @strSQL + N' 
    ,[' + @strColumnName + N'] ' 
    SET @iCounter = @iCounter + 1 
FETCH NEXT FROM @curColumns INTO @strColumnName 
END 
CLOSE @curColumns 
DEALLOCATE @curColumns 

SET @strSQL = @strSQL + N' 
FROM T_Markers 
' 

PRINT @strSQL 
5
SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3' 

이 문 같은 뭔가 테이블의 세 번째 열을 반환

당신은

DECLARE @columnname nvarchar(100), @sql nvarchar(500) 

SELECT @columnname = ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3' 

SET @sql = 'SELECT ' + @columnname + ' FROM mytable' 

EXEC @sql 
4

이렇게 복잡한 답변에 대해서는 적극 권장합니다. 다른 사람이 이미 귀하의 질문에 아래에 지적

대신이 답변을 확인해야합니다 :

Access columns of a table by index instead of name in SQL Server stored procedure

는 SQL 규격은 DDL 또는 DML에 eiher 동적 스키마 구축되지 않습니다.

SELECT를 적용하고 숫자 열을 선택하지 마십시오. 그것은 덜 performant, 덜 읽을 수 있으며 분명히 당신이 스키마를 변경하면 실패합니다.

-2

MySQL의에서 당신은

SELECT * FROM mytable LIMIT 2,1; 

2를 시작하려는 행의 수를 = 사용할 수 있습니다.

1 = 이전 번호부터 선택하려는 행 수.

도움이 되었기를 바랍니다.

+0

LIMIT는 열이 아닌 반환되는 행 수를 제어합니다. – Robert