gpt4 book ai didi

sql-server - 动态创建临时表,插入临时表,然后选择

转载 作者:行者123 更新时间:2023-12-03 18:36:03 25 4
gpt4 key购买 nike

基本上我希望能够基于现有表动态创建临时表,然后将值插入到临时表中,并选择插入的值。

我已经有了可以创建临时表的部分,它工作得很好,只是插入和选择表单工作不太好。

这是我当前的代码。

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)

这是我得到的错误:

(44 行受影响)

(1 行受影响)

(1 行受影响)
消息 208,级别 16,状态 0,第 2 行
无效的对象名称“#Projects”。
消息 208,级别 16,状态 0,第 1 行
无效的对象名称“#Projects”。

最佳答案

尝试用两个 ## 命名表,这将创建一个全局临时表。这可能是范围界定的问题,您可能正在使用 exec 创建表,但是当它返回时不可见。

关于sql-server - 动态创建临时表,插入临时表,然后选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/840968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com