所以这是设置。我有两张桌子:
CREATE TABLE dbo.TmpFeesToRules1(Name varchar, LookupId int)
CREATE TABLE dbo.TempFeesToRules2(FeeId int, Name varchar)
我在已创建的数据库中有第三个名为“费用”的表。我想用'Fee'中的DISTINCT'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对其他一切都不完全正确吗?你能证实这个吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
不需要游标。
关于你的第一个问题(插入TmpFeesToRules1)
INSERT INTO dbo.TmpFeesToRules1(Name, LookupId)
SELECT DISTINCT Name, 0 FROM Fee
关于你的第二个问题(插入Lookup):
INSERT INTO Lookup (LookupType, LookupDesc)
SELECT 'FEE', Name
FROM dbo.TmpFeesToRules1
对于第三个问题,Lookup或TmpFeesToRules1中是否有任何主键?
答案 2 :(得分:1)
我不会使用游标,而是执行以下操作:
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'
这里做了很多假设 - 例如,具有相同描述的其他FEE查找尚不存在。
您的SQL语法和策略似乎存在很多问题。如果这是针对生产系统的,我强烈建议你找一个知道他正在做什么来处理这类事情的SQL开发人员。