Sql server 游标不添加数据,仅在单独执行时添加

Sql server 游标不添加数据,仅在单独执行时添加,sql-server,tsql,cursor,dynamic-sql,Sql Server,Tsql,Cursor,Dynamic Sql,我有一个存储过程和游标循环,我用它在主表中添加数据。问题是,我正在将数据从csv文件添加到临时表,从临时表添加到主表 alter PROCEDURE [dbo].[CreateHub] @HubName varchar(100) AS INSERT INTO dbo.HUB1 (HUB_NAME) SELECT @HubName WHERE (NOT EXISTS

我有一个存储过程和游标循环,我用它在主表中添加数据。问题是,我正在将数据从csv文件添加到临时表,从临时表添加到主表

alter PROCEDURE [dbo].[CreateHub]
  @HubName varchar(100)
AS

INSERT INTO dbo.HUB1
                         (HUB_NAME)
SELECT        @HubName
WHERE        (NOT EXISTS
                             (SELECT        ID_HUB, HUB_NAME
                               FROM            dbo.HUB1
                               WHERE        (HUB1.hub_name = @HubName)))

SELECT        ID_HUB AS newHubId
FROM            dbo.HUB1
WHERE        (hub1.hub_name = @HubName)

GO
bulk insert [dbo].[HUB_temp]
from 'C:\POPAD-DAT\HUB1.csv'
with (fieldterminator = ',', rowterminator = '\n')
go

DECLARE @sSQL AS nVARCHAR(100)
DECLARE @ItemsFromCSV  AS nvarchar(200)

DECLARE sql_cursor_hub CURSOR
    FOR SELECT HUB_NAME FROM HUB_temp
OPEN sql_cursor_hub

FETCH NEXT FROM sql_cursor_hub 
INTO @ItemsFromCSV  -- Multiple variables for multiple CSV columns will be required

WHILE @@FETCH_STATUS = 0
BEGIN

set @sSQL = 'EXEC  [dbo].[CreateHub] ' + @ItemsFromCSV  -- AND OTHER Parameters
print @sSQl
EXECUTE sp_executesql @sSQL

FETCH NEXT FROM sql_cursor_hub
END 

CLOSE sql_cursor_hub;

DEALLOCATE sql_cursor_hub;
完成后,还有另一个代码正在从csv文件执行大容量插入,并运行游标循环以在主表中添加数据

alter PROCEDURE [dbo].[CreateHub]
  @HubName varchar(100)
AS

INSERT INTO dbo.HUB1
                         (HUB_NAME)
SELECT        @HubName
WHERE        (NOT EXISTS
                             (SELECT        ID_HUB, HUB_NAME
                               FROM            dbo.HUB1
                               WHERE        (HUB1.hub_name = @HubName)))

SELECT        ID_HUB AS newHubId
FROM            dbo.HUB1
WHERE        (hub1.hub_name = @HubName)

GO
bulk insert [dbo].[HUB_temp]
from 'C:\POPAD-DAT\HUB1.csv'
with (fieldterminator = ',', rowterminator = '\n')
go

DECLARE @sSQL AS nVARCHAR(100)
DECLARE @ItemsFromCSV  AS nvarchar(200)

DECLARE sql_cursor_hub CURSOR
    FOR SELECT HUB_NAME FROM HUB_temp
OPEN sql_cursor_hub

FETCH NEXT FROM sql_cursor_hub 
INTO @ItemsFromCSV  -- Multiple variables for multiple CSV columns will be required

WHILE @@FETCH_STATUS = 0
BEGIN

set @sSQL = 'EXEC  [dbo].[CreateHub] ' + @ItemsFromCSV  -- AND OTHER Parameters
print @sSQl
EXECUTE sp_executesql @sSQL

FETCH NEXT FROM sql_cursor_hub
END 

CLOSE sql_cursor_hub;

DEALLOCATE sql_cursor_hub;
运行游标并没有添加数据,而是显示相同的id和不同的u=hubname,但没有插入数据

当我单独运行执行SP时,它是这样添加的

EXEC  [dbo].[CreateHub] 'SGGSP30'
EXEC  [dbo].[CreateHub] 'USGSP20'

你能告诉我我到底出了什么问题吗

你在第二次取货时忘了做什么

WHILE @@FETCH_STATUS = 0
BEGIN

  set @sSQL = 'EXEC  [dbo].[CreateHub] ' + @ItemsFromCSV  -- AND OTHER Parameters
  print @sSQl
  EXECUTE sp_executesql @sSQL

  -- This is changed
  FETCH NEXT FROM sql_cursor_hub INTO @ItemsFromCSV
END 
您还应该注意参数声明,@ItemsFromCSV为varchar200,但存储的proc参数仅为varchar100,@sSQL的大小仅为100,但您将@ItemsFromCSV添加到其中