我正在使用光标一次在表中填充租户表中的所有租户。我想确保将tenantId设置为导航表中的常规名称。但是出于某种原因,它认为未设置我的变量。
我尝试了以下代码
**** Script for SelectTopNRows command from SSMS ******/
declare @tenantId int
declare @tenantName nvarchar(100)
DECLARE tenantCursor CURSOR FOR
SELECT Id, [Name]
FROM [dbo].[Tenant]
OPEN tenantCursor;
FETCH NEXT FROM tenantCursor INTO @tenantId, @tenantName;
WHILE @@FETCH_STATUS = 0
BEGIN
print @tenantId
print @tenantName
SET @tenantId = @tenantId
Insert INTO [dbo].Navigations ([Name, TenantId])
VALUES ('Algemeen', @tenantId);
GO
FETCH NEXT FROM tenantCursor INTO @tenantId, @tenantName;
END;
CLOSE tenantCursor;
DEALLOCATE tenantCursor;
GO
我遇到了以下错误:
第102条消息,第15级,状态1,第22行 ';'附近的语法不正确。
第137层15级州立2行26 必须声明标量变量“ @tenantId”。
任何帮助将不胜感激。 罗德尼
答案 0 :(得分:3)
简单的解决方案是仅以设计时使用的基于集合的方式使用SQL,然后运行以下命令而不是您的cursor
:
insert into dbo.Navigations ([Name]
,TenantId
)
select 'Algemeen'
,Id
from dbo.Tenant;
但是,除上述以外,您go
的中间不应有cursor
,并且您会错过insert
上的一些方括号:
Insert INTO [dbo].Navigations ([Name, TenantId])
应该是
Insert INTO [dbo].Navigations ([Name], [TenantId])