使用Cursor从视图输出多列并生成指定格式内容的问题求助
解决Cursor查询视图PCView的输出格式问题
核心问题分析
当前输出全是「- PCfor 0」,说明循环里没正确读取视图中的maker、model、price字段值,而是用了默认的0值,大概率是变量声明和字段绑定不匹配,或者Cursor定义时没正确关联视图字段。
另外,视图PCView里的model字段直接用model访问即可——创建视图时已经通过a.model把PC表的model字段选进视图,没有重命名,所以Cursor里直接引用这个字段名就行。
正确的Cursor实现示例(以SQL Server为例)
以下是完整的可运行代码:
DECLARE @PCList NVARCHAR(MAX) = ''; DECLARE @maker CHAR(1), @model VARCHAR(10), @price DECIMAL(10,2); -- 定义Cursor,从PCView读取需要的字段 DECLARE pc_cursor CURSOR FOR SELECT maker, model, price FROM PCView; OPEN pc_cursor; FETCH NEXT FROM pc_cursor INTO @maker, @model, @price; WHILE @@FETCH_STATUS = 0 BEGIN -- 按要求拼接字符串:「制造商 – PC 型号 for $价格」 SET @PCList = @PCList + ' - ' + @maker + ' – PC ' + @model + ' for $' + CAST(@price AS VARCHAR(20)); FETCH NEXT FROM pc_cursor INTO @maker, @model, @price; END CLOSE pc_cursor; DEALLOCATE pc_cursor; -- 输出结果 SELECT @PCList AS [@PCList];
关键注意点
- 变量类型要和视图字段类型匹配:比如
maker如果是单字符就用CHAR(1),model用字符串类型,price用数值类型 - Cursor查询时必须明确指定要读取的字段,并且
FETCH INTO的变量顺序要和SELECT的字段顺序完全一致 - 字符串拼接时要把数值类型的
price转换成字符串(用CAST或CONVERT),避免类型错误
预期输出
运行后会生成类似这样的结果:
+-----------------------------------------------------------+ | @PCList | +-----------------------------------------------------------+ | - A – PC 1001 for $2114 - B – PC 1002 for $1999 - C – PC 1003 for $2299 | +-----------------------------------------------------------+
内容的提问来源于stack exchange,提问作者101001
相关产品推荐
相关产品推荐

