0
다른 열 이름을 사용하여 동적 SQL 쿼리에서 생성 된 임시 테이블은 데이터에 따라 다릅니다. 하드 코딩 된 열 이름 주어진 임시 테이블을 업데이트 할 때 잘 작동합니다. 내가 변수에 의해 열 이름을 통과 할 때하지만 그렇지 않은 @value가 [스키 전설] 같은 열 이름을 보유하고변수를 통해 열 이름을 제공하여 임시 테이블을 업데이트하는 방법
update #Temp
set @value = ''' + cast(@TempData as nvarchar(max)) + '''
where id = @CUserID
여기서 일하는 것이 쿼리는 작동하지만
update #Temp
set [Dusky Legend] = ''' + cast(@TempData as nvarchar(max)) + '''
where id = @CUserID
이 제대로 작동하지 않습니다 내 문제는 내가 변수 이
Declare @MarketID AS NVARCHAR(MAX) = '1.136903880';
Declare @UserID AS NVARCHAR(MAX) = '6a309d84-d1c6-434d-b9df-4f96a74da912';
declare @TempData as numeric = 1111111111;
declare @@values as NVARCHAR(MAX) ='';
DECLARE @colsSelect AS NVARCHAR(MAX);
DECLARE @colsLoop AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);
SELECT @colsSelect = STUFF((SELECT distinct ',' +
'00' + ' as ' + QUOTENAME(name)
from RunnersInfoes AS t where marketID [email protected]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
SELECT @colsLoop = STUFF((SELECT distinct ',' +
QUOTENAME(name)
from RunnersInfoes AS t where marketID [email protected]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
--print @colsLoop
set @query=
'
;with cte
as
(
select
id, ParentId,0 AS Level,Share ,AccountTypeName,FirstName
from dbo.View_UserProfile
where View_UserProfile.id = ' + '''' + @UserID + '''' +'
union all
select
t.id, t.ParentId,Level + 1 AS Level,t.Share,t.AccountTypeName ,t.FirstName
from View_UserProfile t
inner join cte on t.ParentId = cte.id)
SELECT ID,AccountTypeName as Type,FirstName as Name, ' + @colsSelect + ' into #Temp from cte as t
--exec tempdb..sp_help #Temp
Declare @CUserID AS NVARCHAR(MAX)
DECLARE dynamic_cursor CURSOR FOR
select ID from #Temp
OPEN dynamic_cursor
FETCH NEXT FROM dynamic_cursor INTO @CUserID
WHILE @@FETCH_STATUS = 0
BEGIN
declare @pos as numeric = 0
declare @len as numeric = 0
declare @value as varchar(255)
WHILE CHARINDEX('','', ''' + @colsLoop +''', @pos+1)>0
BEGIN
set @len = CHARINDEX('','', ''' + @colsLoop +''', @pos+1) - @pos
set @value = SUBSTRING(''' + @colsLoop +''', @pos, @len)
PRINT @value
update #Temp set [Dusky Legend] = ''' + cast(@TempData as nvarchar(max)) + ''' where id = @CUserID
set @pos = CHARINDEX('','', ''' + @colsLoop +''', @[email protected]) +1
END
--print' + cast(@TempData as nvarchar(max)) +'
--update #Temp set [Dusky Legend] =''' + cast(@TempData as nvarchar(max)) + ''' where id = @CUserID
FETCH NEXT FROM dynamic_cursor INTO @CUserID
END
CLOSE dynamic_cursor
DEALLOCATE dynamic_cursor
select * from #Temp
'
execute (@query)
이미 전체 코드를 업데이트 중입니다. –
응? 방금 변수로 열을 사용하는 답을주었습니다. – scsimon