我想从数据表OrderDetails(OrderID int,ProductID int)换成一个稀疏矩阵形式的表,字段名为OrderID和 OrderDetails中的非重复ProductID ,怎么做?我自己尝试了下,可是出现了错误,提示declare @id int错了,代码如下:
create table order_pro (OrderId int);
declare @id int
declare cursor1 cursor for         --定义游标cursor1
select distinct(ProductID) from dbo.OrderDetails       --使用游标的对象(跟据需要填入select文)
open cursor1                       --打开游标
fetch next from cursor1 into @id  --将游标向下移1行,获取的数据放入之前定义的变量@id中
print @id
while @@fetch_status=0           --判断是否成功获取数据
begin
declare @mysql nvarchar(100)
set @mysql= 'alter table order_pro add '+cast(@id as nvarchar(6))+ ' int'
--declare SQLSA FROM   @mysql; 
EXECUTE(@mysql);
fetch next from cursor1 into @id   --将游标向下移1行
end
close cursor1                   --关闭游标
deallocate cursor1 

解决方案 »

  1.   

    CREATE TABLE order_pro
    (
    OrderId INT
    );
    DECLARE @id INT,@mysql NVARCHAR(100)
    DECLARE cursor1       CURSOR  
    FOR
        --定义游标cursor1
        SELECT DISTINCT(ProductID) 
        FROM dbo.OrderDetails --使用游标的对象(跟据需要填入select文)
    OPEN cursor1 --打开游标
    FETCH NEXT FROM cursor1 INTO @id --将游标向下移1行,获取的数据放入之前定义的变量@id中
    PRINT @id
    WHILE @@fetch_status=0 --判断是否成功获取数据
    BEGIN
        SET @mysql = 'ALTER TABLE order_pro ADD ['+CAST(@id AS NVARCHAR(6))+'] INT'
        --declare SQLSA FROM @mysql;  
        EXECUTE(@mysql);
        FETCH NEXT FROM cursor1 INTO @id --将游标向下移1行
    END
    CLOSE cursor1 --关闭游标
    DEALLOCATE cursor1  
     只改语法。