SQL Server: вставка в новый столбец не работает - PullRequest
0 голосов
/ 11 июня 2018

Чего мне не хватает?Я пытаюсь изменить таблицу с новым столбцом и вставить в него.В конечном итоге я хочу вставить переменную @loopcounter.Но он, похоже, не распознает новый столбец.

Вот таблица

SELECT 
    [dbo].[webpages_UsersInRoles].[UserId],
    [dbo].[UserProfile].[UserName],
    [dbo].[UserProfile].[CustomerId],
    [dbo].[webpages_UsersInRoles].[RoleId],
    [dbo].[webpages_Roles].[RoleName]
INTO
    #ControlTable
FROM 
    [dbo].[webpages_UsersInRoles]
INNER JOIN
    [dbo].[UserProfile] ON [dbo].[webpages_UsersInRoles].[UserId] = [dbo].[UserProfile].UserId
INNER JOIN 
    [dbo].[webpages_Roles] ON [webpages_UsersInRoles].[RoleId]=[dbo].[webpages_Roles].[RoleId]
WHERE
    CustomerId = 'DEMO' 

И изменение / вставка:

ALTER TABLE #ControlTable
   ADD Loopfield INT;

INSERT INTO #ControlTable (Loopfield)
VALUES (1)

SELECT * FROM #ControlTable;

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

У меня просто отлично работает.

create table #temp (name varchar(10));
insert into #temp values ('bob'), ('mary');
ALTER TABLE #temp
   ADD Loopfield INT;
declare @Loopfield int = 1;
INSERT INTO #temp (Loopfield)
VALUES (@Loopfield);
select * from #temp;
drop table #temp;
0 голосов
/ 11 июня 2018

Я думаю, что вы хотите:

alter table #ControlTable add LoopField int identity(1, 1);

Или просто создать таблицу со столбцом идентификаторов:

SELECT identity(1, 1) as loopfield,
       [dbo].[webpages_UsersInRoles].[UserId],
       [dbo].[UserProfile].[UserName],
       [dbo].[UserProfile].[CustomerId],
       [dbo].[webpages_UsersInRoles].[RoleId],
       [dbo].[webpages_Roles].[RoleName]

Или, если вы не собираетесь вставлять новые строки в таблицу, row_number() достаточно:

SELECT row_number() over (order by (select null)) as loopfield,
       [dbo].[webpages_UsersInRoles].[UserId],
       [dbo].[UserProfile].[UserName],
       [dbo].[UserProfile].[CustomerId],
       [dbo].[webpages_UsersInRoles].[RoleId],
       [dbo].[webpages_Roles].[RoleName]
...