我可以通过 SQL 中的列数来选择特定的列吗?就像是
SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE
我可以通过 SQL 中的列数来选择特定的列吗?就像是
SELECT columns(0), columns(3), columns(5), columns(8) FROM TABLE
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'myTable' AND ORDINAL_POSITION = '3'
此语句返回表的第三列
您需要编写一个事务 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
我强烈建议不要使用这种复杂的答案。
正如其他人已经在您的问题下方指出的那样,您应该查看此答案:
在 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
使用 UNPIVOT 将列转换为行。是这样的:
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10
124000 124001 124002 124003 124004 124005 124006 124007 124008 124009
-- 将表中的列转换为行#JobNos1
选择 JobNo 到 #JobNos1 FROM
(从#YourTable 中选择 F1、F2、F3、F4、F5、F6、F7、F8、F9、F10)AS cp
反透视
(JobNo FOR JobNos IN (F1, F2, F3, F4, F5, F6, F7, F8, F9, F10)) AS up
124000
124001
124002
124003
124004
124005
124006
124007
124008
124009
-- 它需要一种选择行的方法,因此将行#添加到#JobNos2
创建表#JobNos2(JobNo int,Row int)
插入#JobNos2
SELECT JobNo, ROW_NUMBER() OVER (ORDER BY (SELECT 100)) AS Row from #JobNos1
然后你可以做这样的事情:
SET @jobno = SELECT JobNo from #JobNos2 where Row = @SomeRowNumber
我做了这个查询
declare @colCoun int
SELECT @colCoun =COUNT(*) -- get column count in your table
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_catalog = 'YOUR_DB_NAME' AND table_name = 'YOUR_TABLE'
CREATE TABLE #temp([1] VARCHAR(max))
if(@colCoun>1)
BEGIN
DECLARE @cnt INT = 2;
WHILE @cnt <= @colCoun
BEGIN
Exec ('ALTER TABLE #temp ADD ['+ @cnt +'] varchar(max)')
SET @cnt = @cnt + 1;
END
END
insert into #temp
select * from YOUR_TABLE
select [1],[2] from #temp -- select your own column number in range of table