更新时间:2023-02-02 15:04:29
对此查询不可能,因此必须编写自己的存储过程.
例子
创建名称为tlbTextData的表
It is not possible with the query for this u have to write your own store procedure.
Example
Create Table of name tlbTextData
create table tlbTextData (fldTextKey varchar(10), fldTextVal varchar(10))
insert into tlbTextData values('One','1')
insert into tlbTextData values('Two','2')
insert into tlbTextData values('Three','3')
insert into tlbTextData values('Four','4')
insert into tlbTextData values('Five','5')
受约束的程序
Strored Procedure
DECLARE @ColNameAS VARCHAR(10),
@RowElement AS VARCHAR(10),
@SqlQuery AS NVARCHAR(300),
@iColumnName AS INT,
@iFirstTime AS INT,
@AddColName AS NVARCHAR(10)
SELECT @iFirstTime=0
CREATE TABLE #tlbMemTable (fldColName VARCHAR(10))
DECLARE GetColumnName CURSOR FOR
SELECT column_name FROM Information_Schema.Columns WHERE table_name='tlbTextData'
OPEN GetColumnName
FETCH NEXT FROM GetColumnName INTO @ColName
WHILE(@@FETCH_STATUS = 0)
BEGIN--1
INSERT INTO #tlbMemTable(fldColName) VALUES(@ColName)
SET @iColumnName = 0
SELECT @SqlQuery = 'DECLARE GetRow CURSOR FOR SELECT '+ @ColName +' FROM tlbTextData'
EXEC sp_executesql @SqlQuery
OPEN GetRow
FETCH NEXT FROM GetRow INTO @RowElement
WHILE(@@FETCH_STATUS = 0)
BEGIN--2
SELECT @AddColName = 'VAL'+CAST(@iColumnName AS VARCHAR(10))
print @AddColName
IF(@iFirstTime=0)
BEGIN
SELECT @SqlQuery = 'ALTER TABLE #tlbMemTable ADD '+@AddColName+' NVARCHAR(10)'
EXEC(@SqlQuery)
END
SELECT @SqlQuery = 'UPDATE #tlbMemTable SET '+@AddColName+'='''+@RowElement+''''+' WHERE fldColName='''+@ColName +''''
EXEC(@SqlQuery)
SET @iColumnName = @iColumnName + 1
FETCH NEXT FROM GetRow INTO @RowElement
END--2
CLOSE GetRow
DEALLOCATE GetRow
SET @iFirstTime = 1
FETCH NEXT FROM GetColumnName INTO @ColName
END--1
CLOSE GetColumnName
DEALLOCATE GetColumnName
SELECT * FROM #tlbMemTable
DROP TABLE #tlbMemTable
注意:如果您要使用它,请优化上述sp:)
Note : Please optimize above sp if ur going to use it :)