2013-07-26 44 views
7

Tôi có thể chọn các cột cụ thể theo số cột trong SQL không? Something nhưMáy chủ sql chọn cột theo số

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

Cảm ơn

+2

Kiểm tra http://stackoverflow.com/questions/368505/is-it-possible-to-select-sql-server-data-using-column-ordinal-position –

+1

Xem câu trả lời này cho câu trả lời của bạn http://stackoverflow.com/a/4883109/1504882 – Elias

+0

đây là câu hỏi tương tự cho câu hỏi của bạn với câu trả lời hoàn hảo: http://stackoverflow.com/questions/4882837/access-columns-of-a-table-by- index-instead-of-name-in-sql-server-archive-procedur – Karamafrooz

Trả lời

3

Bạn có để sử dụng SQL động để thực hiện điều này:

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' 

Tuyên bố này trả về cột thứ ba của bảng của bạn

Bạn sẽ cần phải viết một tuyên bố Transact SQL như

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

Tôi rất muốn giới thiệu các câu trả lời phức tạp như vậy.

Như những người khác đã chỉ ra bên dưới câu hỏi của bạn, bạn nên kiểm tra câu trả lời này thay vì:

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

Các đặc điểm kỹ thuật SQL không được xây dựng cho giản đồ năng động eiher trong DDL hoặc DML.

Chấp nhận và không sử dụng số cho các cột trong SELECT. Nó sẽ ít hoạt động hơn, ít có thể đọc được và rõ ràng sẽ thất bại nếu bạn thay đổi lược đồ.

-2

Tại MySQL bạn có thể sử dụng

SELECT * FROM mytable LIMIT 2,1; 

2 = số hàng mà bạn muốn bắt đầu.

1 = số hàng bạn muốn chọn bắt đầu từ số trước đó.

Tôi hy vọng nó hữu ích.

+0

LIMIT kiểm soát số hàng được trả về, không phải cột. – Robert

Các vấn đề liên quan