绝对具有挑战性!!!sql server 高手请看过来!!!
1。我想动态的把某一表的一字段的值变为另一表的列名,怎么写代码??
例如:规格字段有一值------aa,字符型的。
若写成alter table t1 add 'aa'会出错,怎样才能达到alter table t1 add aa
的效果?
2。今有一表,结构如下
列名 类型
编号 char(20)
规格 char(6)
变成下面这样的表
列名 类型
编号 char(20) 同上
XX INT 记录第一个表中规格值为XX的对应商品编号的商品的个数
XXL int 记录第一个表中规格值为XXL的对应商品编号的商品的个数
................. 从第二列起,所有列的名字为第一个表中具有的不同规格的
值,列的个数有第一个表中规格不同种类的个数决定。
怎样用代码实现,最好详细点!!本人将不胜感激!!!
问题点数:38、回复次数:8Top
1 楼usb(usb)回复于 2001-08-07 16:25:04 得分 0
取出表1的值作为列名建表2Top
2 楼zhangshzh(joe)回复于 2001-08-07 16:50:49 得分 0
关注!!Top
3 楼N_chow(Yukon)回复于 2001-08-07 17:03:55 得分 20
DECLARE @strCommand varchar(200)
DECLARE @strFldName varchar(20)
if EXISTS (select * from dbo.sysobjects where id = object_id(N'[dbo].[tblTest2]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP table tblTest2
/*先把編號欄位加上 */
CREATE Table tblTest2(編號 varchar(50))
Declare cur CURSOR FOR
SELECT DISTINCT 規格 From tblTest1
open cur
SET @strCommand= 'ALTER Table tblTest2 ADD '
FETCH NEXT FROM cur INTO @strFldName
WHILE @@FETCH_STATUS=0
BEGIN
SET @strCommand=@strCommand + @strFLdName + ' INT , '
FETCH NEXT FROM cur INTO @strFldName
END
set @strCommand=LEFT(@strCommand,LEN(@strCommand)-1)
EXECUTE (@strCommand)
CLOSE Cur
DEALLOCATE CurTop
4 楼N_chow(Yukon)回复于 2001-08-07 17:11:56 得分 0
關鍵是用 EXECUTE 可動態執行一個TSQL語句Top
5 楼liwz(liwz)回复于 2001-08-07 17:28:12 得分 18
Create proc altertable2
@param1 char(20)
As
Alter Table table2 add @param1 char(20)
go
Declare @fld1 char(20)
select @fld1=编号 from table1 where ...
Exec altertable2 @fld1
Top
6 楼liwz(liwz)回复于 2001-08-07 17:32:23 得分 0
Create proc altertable2
@param1 char(20)
As
Alter Table table2 add @param1 char(20)
go
Declare @fld1 char(20)
select @fld1=规格 from table1 where ...
Exec altertable2 @fld1
Top
7 楼wwl007(疑难杂症)回复于 2001-08-07 19:32:44 得分 0
第一个问题用个动态sql 就可以了!
很容易!
select @synsql='alter table t1 add '+@aa
exec(@synsql)
Top
8 楼pointer111()回复于 2001-08-08 03:25:57 得分 0
谢谢你们大家,我的问题解决了!!Top




