Mik*_*ike 12 sql sql-server sql-server-2008
我可以按SQL中的列数选择特定列吗?就像是
SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE
Run Code Online (Sandbox Code Playgroud)
谢谢
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3'
Run Code Online (Sandbox Code Playgroud)
此语句返回表的第三列
您需要编写一个transact SQL语句,如
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
Run Code Online (Sandbox Code Playgroud)
我强烈建议您不要回答如此复杂的答案。
正如其他人已经在您的问题下方指出的那样,您应该改用以下答案:
通过索引而不是SQL Server存储过程中的名称访问表的列
SQL规范不是为DDL或DML中的动态模式构建的。
接受它,不要对SELECT中的列使用数字。如果更改架构,它将导致性能降低,可读性下降,并且显然会失败。
您必须使用动态 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
Run Code Online (Sandbox Code Playgroud)