我使用RedGate SQL数据比较并生成.sql文件,因此我可以在本地计算机上运行它.但问题是该文件超过300mb,这意味着我无法复制和粘贴,因为剪贴板将无法处理它,当我尝试在SQL Server Management Studio中打开该文件时,我收到错误关于文件太大了.
有没有办法运行一个大的.sql文件?该文件基本上包含两个新表的数据.
我几乎完成了将基于游标的存储过程更改为基于集合的过程.差不多,因为我只有一件事要弄明白.
它们使用一个调用的存储过程GetSequence来查询表,使用新的序列号(old + 1)更新它并返回新的序列号值.当他们使用游标时,这不是问题,因为他们将输出值分配给变量,然后使用变量.
我能想到保持新的存储过程集的唯一方法是GetSequence在INSERT或UPDATE语句中执行.但是,当我尝试这个时,我得到了奇怪的具体错误,"关键字'EXEC'附近的语法不正确".
这是旧代码:
DECLARE @new_UD_campaignID BIGINT -- Get the new ud_lead_id for the new lead set
EXEC ppGlobal.dbo.Getsequence
'ud_campaign_id',
@new_UD_campaignID OUTPUT
DECLARE @OrderNum VARCHAR(9);
IF @corpCamp LIKE '%LEP%'
BEGIN
SELECT @OrderNum = ( 'L' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8) )
END
ELSE
BEGIN
SELECT @OrderNum = ( 'C' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8) )
END
Run Code Online (Sandbox Code Playgroud)
这可行,但实际上很慢,因为它在游标中并且更新了超过两百万行.
我正在尝试的新代码如下所示:
UPDATE @List
SET OrderNumBigInt = EXEC (ipCore.dbo.Getsequence
'ud_campaign_id',
@new_UD_campaignID OUTPUT)
Run Code Online (Sandbox Code Playgroud)
我找不到任何特定的文档,表明您无法在SELECT或UPDATE语句中执行存储过程来设置列值.
有没有人尝试类似的东西,但成功了吗?