首页 > 解决方案 > 变量作为列名 SQL Server

问题描述

我想知道,是否存在创建具有可变列名的 CURSOR 的方法

例子:

我有这张桌子:

结果表

翻译图像text

ID | TEST1 | TEST2 | TEST3
7      1       3       1
8      2       3       4
9      3       4       5
10     3       3       1
11     2       3       4
12     3       4       5
13     1       3       1
14     2       3       4
15     3       4       5

SQL 代码:

DECLARE
   @count int,
   @columnX varchar(5),
   @aux2previous int,
   @aux2 int,
   @aux1 int,
   @columnXResult int,
   @id int;

SET @aux2previous = 0;
SET @count = 1;

SET @columnX = 'test' + count;
DECLARE cursor1 CURSOR FOR
    SELECT ID, @columnX FROM table

OPEN cursor1 

FETCH NEXT FROM cursor1 INTO @id,@columnXResult

...

SET @aux1 = @columnXResult+ @aux2previous
SET @aux2 = @aux2previous + 1                               
SET @string = 'SXW_'+@columnX+'_'+@aux1+'<>'+@aux2

INSERT INTO tblAuxiliary VALUES(@aux1,@aux2,@string)

SET @count = @count + 1;
SET @aux2previous = @aux2

...

结果表辅助(我需要的)

翻译图像text

我的第一个表中的 Foreach 行我在这里有一个新行:

对于列 Test1

AUX1 | AUX2 | STRING
 1      1      SXW_Test1_1<>1
 3      2      SXW_Test1_3<>2

对于列 Test2

AUX1 | AUX2 | STRING
 3      1      SXW_Test2_3<>1
 6      4      SXW_Test2_6<>4

对于列 Test3

AUX1 | AUX2 | STRING
 1      1      SXW_Test3_1<>1
 5      2      SXW_Test3_5<>2

当我使用@columnX

SELECT ID, @columnX FROM table

我收到了这个错误:

将 varchar 值“test1”转换为数据类型 int 时转换失败

我看到类似的东西,@sql = 'select '+@columnX ...,但我需要执行它,但我不能用光标来执行此操作。

标签: sql-server

解决方案


这是如何使用动态 sql 和游标的示例:

create table test (
  t1 int not null,
  t2 varchar(10) not null
)

declare @query varchar(1000)

select @query = '
   declare @column int

   declare query cursor for
     select t'+cast(1 as varchar(1))+' from test

    open query
    fetch next from query into @column
    while(@@FETCH_STATUS=0)
    begin
       select @column

     fetch next from query into @column
    end
    close query
    deallocate query
'
exec (@query)

推荐阅读