sql-server - 变量作为列名 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 和游标的示例:
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)
推荐阅读
- android - 在底部导航中动态更改片段目的地
- node.js - 在不匹配的 peerDependencies 上强制 npm 安装失败
- javascript - 单击按钮并发送命令以在 xterm.js 终端上执行
- c# - 如何返回一个字符串并在另一个静态 void 中使用它?
- java - org.jboss.msc.service.ServiceNotFoundException:服务服务 jboss.ejb.default-resource-adapter-name-service 未找到
- python - 多进程计算后数据重置
- firebase - Flutter中如何实现动态页面构建?
- python - 如何在 Python 中访问 3d 矩阵的每个元素
- reactjs - 如何在我的 React 应用程序中渲染表情符号(使用 Webpack)?
- widget - 多个用户同时运行一个仪表板