代码之家  ›  专栏  ›  技术社区  ›  Scott

SQL游标/填充问题

  •  1
  • Scott  · 技术社区  · 14 年前

    CREATE TABLE dbo.TmpFeesToRules1(Name varchar, LookupId int)
    CREATE TABLE dbo.TempFeesToRules2(FeeId int, Name varchar)
    

    我在已经创建的数据库中有第三个名为“Fee”的表。我想用不同于“Fee”的“Name”填充dbo.TmpFeesToRules1“Name”字段。我会这样做吗?

    INSERT INTO dbo.TmpFeesToRules1(Name, LookupId)
    VALUES (SELECT DISTINCT Name FROM Fee, 0)
    

    然后,我想使用一个游标在dbo.TmpFeesToRules1中循环,并将这些行中的每一行插入到另一个名为“Lookup”的表中,这样这些名称就会被分配LookupId:

    DECLARE db_cursor CURSOR FOR  
    SELECT Name 
    FROM dbo.TmpFeesToRules1 
    
    OPEN db_cursor   
    FETCH NEXT FROM db_cursor INTO @Name   
    
    WHILE @@FETCH_STATUS = 0   
    BEGIN   
           INSERT INTO dbo.Lookup (LookupType, LookupDesc)
           VALUES ('FEE', @Name)
    
           FETCH NEXT FROM db_cursor INTO @name   
    END   
    
    CLOSE db_cursor
    

    然后我想回到dbo.TmpFeesToRules1并更新它,然后为每个名称插入LookupId。我该怎么做?

    另外,我也不认为我的SQL对于其他所有东西都是完全正确的?你们能核实一下吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Tom H    14 年前

    与其在光标上乱搞,我只想做以下几件事:

    INSERT INTO dbo.TmpFeesToRules1 (name, LookupId)
    SELECT DISTINCT name, 0 FROM Fee
    
    INSERT INTO Lookup (LookupType, LookupDesc)
    SELECT 'FEE', name FROM dbo.TmpFeesToRules1
    
    UPDATE TFTR
    SET
        LookupID = LU.id
    FROM
        Lookup LU
    INNER JOIN dbo.TmpFeesToRules1 TFTR ON
        TFTR.name = LU.LookupDesc
    WHERE
        LU.LookupType = 'FEE'
    

    这里有很多假设——例如,具有相同描述的其他费用查找并不存在。

        2
  •  2
  •   HLGEM    14 年前
        3
  •  1
  •   Tim Cooper    13 年前

    第一个问题(插入TmpFeesToRules1)

    INSERT INTO dbo.TmpFeesToRules1(Name, LookupId)
    SELECT DISTINCT Name, 0 FROM Fee
    

    INSERT INTO Lookup (LookupType, LookupDesc)
    SELECT 'FEE', Name
    FROM dbo.TmpFeesToRules1
    

    对于第三个问题,Lookup或TmpFeesToRules1中是否有主键?