我想不通为什么(也许你不能做到这一点),我得到了范围错误如何解决引用表变量时“必须声明标量变量”的错误?
必须声明标量变量“@CompanyGroupSites_Master。
那么,但我不能访问我的表变量这样我的光标里面,或者我必须错过了一些简单的就是维持该表变量超出范围从光标身体内引用时?
DECLARE @TotalCompaniesToProcess int
SET @TotalCompaniesToProcess = (select distinct Count(BusinessLine) from vwBuisinessUnit)
IF(@TotalCompaniesToProcess > 0)
BEGIN
---------------- ############# SETUP ############# ----------------
DECLARE @Companies TABLE (Company varchar(30))
Insert Into @Companies select distinct Company from Companies
DECLARE @CompanyGroups_Added TABLE(
CompanyGroupDesc varchar(50),
size varchar(50)
)
DECLARE @CompanyGroupSites_Added TABLE (
CompanyGroupID int,
CompanyID varchar(12)
)
DECLARE @CompanyGroupSites_Master TABLE (
CompanyGroupID int,
CompanyID varchar(12)
)
Insert into @CompanyGroupSites_Master select CompanyGroupID, CompanyID from Sec.CompanyGroupSites
DECLARE @CompanyGroupID int
DECLARE @Company int
---------------- END SETUP ----------------
---------------- UPDATE THE COMPANIES ----------------
DECLARE Companies_Cursor CURSOR FOR (select distinct BusinessLine from vwBuisinessUnit)
--select distinct BU, BusinessLine from vwBusinessUnit
Open Companies_Cursor
Fetch NEXT FROM Companies_Cursor into @Company
WHILE @@FETCH_STATUS = 0
BEGIN
-- is there an existing CompanyGroup for this Organization? If not create it
SET @CompanyGroupID = (select CompanyGroupID from Sec.CompanyGroup
where size = 'Business'
and CompanyGroupDesc = @Company)
IF(@CompanyGroupID < 1)
BEGIN
INSERT INTO @CompanyGroups_Added ([CompanyGroupDesc], [Size])
VALUES (@Company, 'Business')
SET @CompanyGroupID = @@IDENTITY
select @CompanyGroupID as CompanyGroupID_Added -- testing
END
Select ToDelete.* from (
select CompanyGroupID, Company
from @CompanyGroupSites_Master
where @CompanyGroupSites_Master.CompanyGroupID = @CompanyGroupID) as ToDelete
delete from @CompanyGroupSites_Master where @CompanyGroupSites_Master.CompanyGroupID = @CompanyGroupID
Fetch NEXT FROM Companies_Cursor into @Company
END
CLOSE Companies_Cursor
DEALLOCATE Companies_Cursor
END
你为什么要使用此光标? AND为什么哦当你使用OUTPUT或scope_identity()时(@@ Identity会导致严重的数据完整性问题,并且不应该以这种方式使用),你为什么要使用@@ identity? – HLGEM
现在使用游标导致我不知道T -SQL用于迭代循环的地面洞穴。在我工作之后,我会改变这一点。废话是啊,它已经有一段时间了,忘记了scope_identity – PositiveGuy
除了游标,我还能用什么?因为我不是简单地做一个可以在2班轮中完成的crud操作来代替这个迭代循环。建议吗? – PositiveGuy