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
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
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
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
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 đồ.
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.
LIMIT kiểm soát số hàng được trả về, không phải cột. – Robert
Kiểm tra http://stackoverflow.com/questions/368505/is-it-possible-to-select-sql-server-data-using-column-ordinal-position –
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
đâ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