sql-server - SQL,一次性初始化游标,必须声明标量变量
问题描述
我正在使用游标一次用租户表中的所有租户填充一个表。我想确保在我的导航表中将tenantId 设置为General 名称。但由于某种原因,它认为我的变量没有设置。
我尝试了以下代码
**** 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 行 ';' 附近的语法不正确。
Msg 137, Level 15, State 2, Line 26 必须声明标量变量“@tenantId”。
任何帮助都感激不尽。罗德尼
解决方案
简单的解决方案是仅以基于集合的方式使用 SQL 来设计和运行以下命令,而不是您的cursor
:
insert into dbo.Navigations ([Name]
,TenantId
)
select 'Algemeen'
,Id
from dbo.Tenant;
但是,除了上述内容之外,您go
的中间不应该有 acursor
并且您错过了一些方括号insert
:
Insert INTO [dbo].Navigations ([Name, TenantId])
应该
Insert INTO [dbo].Navigations ([Name], [TenantId])
推荐阅读
- javascript - HTML代码中vue.js V-for和Flask之间的冲突?
- django - 在 Django 中,我有一个模型,其中基于某个字段,必须确定外键的下一个字段映射
- c - 我需要一个 main 来创建一个静态库吗?
- javascript - 将悬停转换为点击事件
- python - 从给定的开始结束时间开始计算每小时时间范围内的发生次数
- mysql - Mysql错误的执行计划
- javascript - 输入类型时间24小时格式
- c++ - 我无法在使用 forward_as_tuple 创建的元组中按类型访问元素
- r - 子集空气质量数据时选择了未定义的列
- php - 在 phpspreadSheet 中设置具有日期格式的单元格