SugerOO 2017-05-18 12:05 采纳率: 0%
浏览 1629
已结题

sql语句在 sql server 下可正确执行,在qt下执行后无结果?

这是sql server 中的sql 语句 作用是 动态的行转列
drop table #sc2
select sc.snum,sname,cname,score into #sc2 from sc,s,c where sc.snum in(select snum from sclass,class where sclass.classNum=class.classNum and class.className='物联网工程151') and s.snum=sc.snum and c.cnum=sc.cnum
DECLARE @sql_str NVARCHAR(MAX)
DECLARE @sql_col NVARCHAR(MAX)
DECLARE @tableName SYSNAME --行转列表
DECLARE @groupColumn SYSNAME --分组字段
DECLARE @row2column SYSNAME --行变列的字段
DECLARE @row2columnValue SYSNAME --行变列值的字段
SET @tableName = '#sc2'
SET @groupColumn = 'sname'
SET @row2column = 'cname'
SET @row2columnValue = 'score'
--从行数据中获取可能存在的列
SET @sql_str = N'
SELECT @sql_col_out = ISNULL(@sql_col_out + '','','''') + QUOTENAME(['+@row2column+'])
FROM ['+@tableName+'] GROUP BY ['+@row2column+']'
--PRINT @sql_str
EXEC sp_executesql @sql_str,N'@sql_col_out NVARCHAR(MAX) OUTPUT',@sql_col_out=@sql_col OUTPUT
--PRINT @sql_col
SET @sql_str = N'
SELECT * FROM (
SELECT ['+@groupColumn+'],['+@row2column+'],['+@row2columnValue+'] FROM ['+@tableName+']) p PIVOT
(SUM(['+@row2columnValue+']) FOR ['+@row2column+'] IN ( '+ @sql_col +') ) AS pvt
ORDER BY pvt.['+@groupColumn+']'
--PRINT (@sql_str)
EXEC (@sql_str)

qt中的语句
QString string =

                      " select sc.snum,sname,cname,score into sc2 from sc,s,c where sc.snum in(select snum from sclass,class where sclass.classNum=class.classNum and class.className='物联网工程151') and s.snum=sc.snum and c.cnum=sc.cnum"
                      " DECLARE @sql_str NVARCHAR(MAX)"
                      " DECLARE @sql_col NVARCHAR(MAX)"
                      " DECLARE @tableName SYSNAME "//--行转列表
                      " DECLARE @groupColumn SYSNAME "//--分组字段
                      " DECLARE @row2column SYSNAME"// --行变列的字段
                      " DECLARE @row2columnValue SYSNAME "//--行变列值的字段
                      " SET @tableName = 'sc2'"
                      " SET @groupColumn = 'sname'"
                      " SET @row2column = 'cname'"
                      " SET @row2columnValue = 'score'"
                     // " --从行数据中获取可能存在的列"
                      " SET @sql_str = N'"
                      " SELECT @sql_col_out = ISNULL(@sql_col_out + '','','''') + QUOTENAME(['+@row2column+'])"
                      " FROM ['+@tableName+'] GROUP BY ['+@row2column+']'"
                     // " --PRINT @sql_str"
                      " EXEC sp_executesql @sql_str,N'@sql_col_out NVARCHAR(MAX) OUTPUT',@sql_col_out=@sql_col OUTPUT"
                     // " --PRINT @sql_col"
                      " SET @sql_str = N'"
                      " SELECT * FROM ("
                      " SELECT ['+@groupColumn+'],['+@row2column+'],['+@row2columnValue+'] FROM ['+@tableName+']) p PIVOT"
                      " (SUM(['+@row2columnValue+']) FOR ['+@row2column+'] IN ( '+ @sql_col +') ) AS pvt"
                      " ORDER BY pvt.['+@groupColumn+']'"
                     // " --PRINT (@sql_str)"
                      " EXEC (@sql_str)"
                      " DROP TABLE sc2";
QSqlQuery query;
     query.prepare(string);
     query.exec();
QSqlQueryModel *model  = new QSqlQueryModel;
model->setQuery(query);
tableView->setModel(model);

在sql server 2012下可正确 执行 如下图
图片说明
在QT 5.8下 执行却没有结果 如下图
图片说明

程序中 其他的函数里执行的sql语句 都是可以返回结果的
不过都比较简单

贴上来的这个sql语句虽然比较复杂 但是 我在QT把sql语句打印出来 在复制到 sql server
里运行 也是正确的

不太清楚是哪里有问题

  • 写回答

3条回答 默认 最新

  • SugerOO 2017-05-19 03:17
    关注

    楼上的回答 看过了 也没解决

    我又测试了一下代码 发现
    在 sql server 中 执行以下操作
    建表 table1 查询表 table1 删除表table1 是会显示结果的
    但在qt中 是不会显示结果的

    我把上面的sql 语句做了些修改:
    把行转列后的 表 导入到一张新表中 然后在 查询这张新表 在tableView中显示查询新表的结果后 在删除该新表 绕过了这个问题
    但具体原因 还是不了解

    评论

报告相同问题?

悬赏问题

  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档
  • ¥60 全一数分解素因子和素数循环节位数
  • ¥15 ffmpeg如何安装到虚拟环境
  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误