以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- sql查询问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=161325) |
-- 作者:happyft -- 发布时间:2021/3/13 11:14:00 -- sql查询问题 查将数据库中包含ID字段的所有表中的ID值查询出来,用了下面的语句,却总是出错 DECLARE @tmp1 TABLE --声明表变量 ( tbName VARCHAR(30) , colName VARCHAR(16) , colValue INT ); ---用于存储变量的游标 DECLARE @tbName CHARACTER(30) , @colName CHARACTER(16); --声明游标查询所有包含ID字段的表 DECLARE tbnames CURSOR FOR ( SELECT OBJECT_NAME(id) tbName , name AS colName FROM syscolumns WHERE ( name = \'ID\' ) AND id IN ( SELECT id FROM sysobjects WHERE xtype = \'u\' ) ); --打开游标循环游标变量 OPEN tbnames; FETCH NEXT FROM tbnames INTO @tbName, @colName; WHILE @@FETCH_STATUS = 0 BEGIN EXEC (\' INSERT into \' + @tmp1+\' ( tbName , colName , colValue ) SELECT \' + @tbName + \',\' + @colName + \',ID FROM \' + @tbName ); FETCH NEXT FROM tbnames INTO @tbName, @colName; --转到下一个游标 END; --关闭并释放游标 CLOSE tbnames; DEALLOCATE tbnames; SELECT * FROM @tmp1; 红色部份就是想把每一个表中的ID值查询出来汇总到一个表中,但总提示出错,哪里写的不对? 谢谢! |
-- 作者:有点蓝 -- 发布时间:2021/3/13 12:11:00 -- EXEC (\' INSERT into \' + @tmp1+\' (\' + tbName +\' ,\'+ colName +\' ,\'+ colValue +\' ) SELECT \'\'\' + @tbName + \'\'\',\'\'\' + @colName + \'\'\',ID FROM \' + @tbName );
|
-- 作者:HappyFt -- 发布时间:2021/3/13 17:00:00 -- 如果先新建好一个物理数据表temp_ID,再用下面的语句就没问题: EXEC (\' INSERT into temp_ID (tbName ,tabID ) SELECT \'\'\' + @tbName + \'\'\', ID FROM \' + @tbName ) --这样可以正确运行 但是用下面的语句声明了一个表变量,插入数据在里面,还是不行 DECLARE @tmp1 TABLE (tbName VARCHAR(30) , ID INT) --声明表变量 ... EXEC (\' INSERT into \'+@tmp1+ \' (tbName , ID) SELECT \'\'\' + @tbName + \'\'\', ID FROM \' + @tbName ) ... 按老师写的还是不行,总是提示未声明变量什么的,表变量中间红色这部份写法哪里不对? 谢谢 |
-- 作者:有点蓝 -- 发布时间:2021/3/13 17:09:00 -- https://www.cnblogs.com/luckyting/articles/7717871.html |
-- 作者:HappyFt -- 发布时间:2021/3/13 17:33:00 -- 把表变量写到exec里面是可以执行, EXEC ( \'DECLARE @tmp1 TABLE (tbName VARCHAR(30) ,ID INT); INSERT into @tmp1 SELECT \'\'\' + @tbName + \'\'\', ID FROM \' + @tbName ); 但问题是要从400多个表中提取ID值,这样每次循环执行的结果集如何汇总到一个表中来呢? 还是建立一个数据表是最简单的办法是不?
|
-- 作者:有点蓝 -- 发布时间:2021/3/13 17:34:00 -- 建立一个数据表吧 |