Sql 根据类似的“行值”将数据从一个表读取到另一个表

Sql 根据类似的“行值”将数据从一个表读取到另一个表,sql,sql-server,syntax,Sql,Sql Server,Syntax,我试图将t_代码从表A填充到表B,其中表A的名称类似于表B的名称,但我在让代码正常工作方面遇到了一些问题 语法有什么问题?我是使用游标的初学者 DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR SELECT name FROM [GA_EMPLOYEE2] DECLARE @id VARCHAR(255) -- Open the cursor OPEN c FETCH NEXT FROM c INTO @id WHILE (@@FETC

我试图将t_代码从表A填充到表B,其中表A的名称类似于表B的名称,但我在让代码正常工作方面遇到了一些问题

语法有什么问题?我是使用游标的初学者

DECLARE c CURSOR READ_ONLY FAST_FORWARD FOR
    SELECT name
    FROM [GA_EMPLOYEE2]

DECLARE @id VARCHAR(255)

-- Open the cursor
OPEN c

FETCH NEXT FROM c INTO @id
WHILE (@@FETCH_STATUS = 0)
BEGIN
    INSERT INTO [GA].[dbo].[GA_EMPLOYEE2].[t_code]
    SELECT  [GA].[dbo].[GA_EMPLOYEE1].[t_code]
    WHERE [GA].[dbo].[GA_EMPLOYEE1].[name] LIKE '%@id%'



    FETCH NEXT FROM c INTO @id
END

-- Close and deallocate the cursor
CLOSE c
DEALLOCATE c

所以。。。看起来您正在从EMPLOYEE2获取一个姓名列表,然后对于EMPLOYEE1中的每个tcode(姓名在列表中),您正在将EMPLOYEE1 tcode插入EMPLOYEE2

不需要所有这些。这是一个非常基本的INSERT语句,具有内部联接:

虽然我觉得你的代码没有充分描述你的意图。也许您希望使用在匹配的EMPLOYEE1表中找到的tcode更新每个名称的EMPLOYEE2记录。若有,则:

UPDATE
    [GA].[dbo].[GA_EMPLOYEE2]
SET
    [GA].[dbo].[GA_EMPLOYEE2].[t_code] = [GA].[dbo].[GA_EMPLOYEE1].[t_code]
FROM
    [GA].[dbo].[GA_EMPLOYEE2]
    INNER JOIN [GA].[dbo].[GA_EMPLOYEE1] ON
        [GA].[dbo].[GA_EMPLOYEE2].[name] = [GA].[dbo].[GA_EMPLOYEE1].[name];

您根本不需要游标,但您确定要插入新行,而不是更新表B中的现有行吗?非常感谢。我甚至没想到。
UPDATE
    [GA].[dbo].[GA_EMPLOYEE2]
SET
    [GA].[dbo].[GA_EMPLOYEE2].[t_code] = [GA].[dbo].[GA_EMPLOYEE1].[t_code]
FROM
    [GA].[dbo].[GA_EMPLOYEE2]
    INNER JOIN [GA].[dbo].[GA_EMPLOYEE1] ON
        [GA].[dbo].[GA_EMPLOYEE2].[name] = [GA].[dbo].[GA_EMPLOYEE1].[name];