Créer dynamiquement de la table temporaire, l'insérer dans la table temporaire, puis sélectionnez

Fondamentalement, je veux être en mesure de créer dynamiquement une table temporaire à partir d'une table existante, puis insérer des valeurs dans la table temporaire, et sélectionnez les valeurs insérées.

je suis arrivé à la partie où je peux créer la table temp fonctionne très bien, c'est juste que de l'insertion et de la sélection de la forme ne fonctionne pas trop bien.

voici mon code actuel.

declare @table table 
(
OrdinalPosition int, 
ColumnName nvarchar(255), 
DataType nvarchar(50), 
MaxChar int, 
Nullable nvarchar(5)
)
declare @i int
declare @count int
declare @colname nvarchar(255), @datatype nvarchar(50), @maxchar int
declare @string nvarchar(max)
declare @tblname nvarchar(100)
set @tblname='Projects'
set @string='create table #' + @tblname + ' ('
insert into @table 
(
OrdinalPosition, 
ColumnName, 
DataType, 
MaxChar, 
Nullable
)
SELECT    
ORDINAL_POSITION ,
COLUMN_NAME ,
DATA_TYPE ,
CHARACTER_MAXIMUM_LENGTH ,
IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = @tblname
set @i=1
select @count=count(*) from @table
while (@i<=@count)
begin
select @colname=ColumnName from @table where OrdinalPosition=@i
select @datatype=DataType from @table where OrdinalPosition=@i
select @maxchar=MaxChar from @table where OrdinalPosition=@i
if (@maxchar is null)
begin
set @string = @string + @colname + ' ' + @datatype
end
else
begin
set @string = @string + @colname + ' ' + @datatype + '(' + cast(@maxchar as nvarchar(20)) + ')'
end
if (@i=@count)
begin
set @string = @string + ')'
end
else
begin
set @string = @string + ', '
end
set @i=@i+1
end
select @string
exec(@string)
set @string='
insert into #Projects (pk_prID, prWASSN_ID, prProjectStatus, prBusinessUnit, prServiceLine, prStudyTypeCode, prStudyNumber, prTimePoint, prStudyDirector, 
prGroupLeader, prBookedDate, prBookedAmount, prConsumed, prBudgetedHours, prFinalReport, prFinalYear, prFinalMonth, prStartQA, 
prLabWorkStarted, prLabWorkCompleted, prProjImpDate, prCompanyName, prCompanyNumber, prIsFTE, prRevisedDeadlineDate, prProjectFinalized, 
prBookedYear, prBookedMonth, prCRMQuoteID, prLineItemNumber, prDraftReport, prInternalTargetDeadlineDate, prProtocolSignedDate, 
prDataToRWS, prRWSWorkStarted, prFirstDraftToPL, prFirstDraftToQA, prArchivedDate, prToPLForQACommentReview, 
prAnticipatedProjectArchiveDate, prToQAWithPLCommentResponse, prProjectReactivatedDate, prQAFinishDate, prSecondDraftReportToClient)
select *
from cube.Projects'
select @string
exec (@string)
set @string='select * from #Projects'
exec (@string)

c'est l'erreur que j'obtiens:

(44 ligne(s) affectée)

(1 ligne(s) affectée)

(1 ligne(s) affectée)
Msg 208, Niveau 16, État 0, La Ligne 2
Nom d'objet non valide '#Projets".
Msg 208, Niveau 16, État 0, La Ligne 1
Nom d'objet non valide '#Projets".

OriginalL'auteur DForck42 | 2009-05-08