【问题标题】:cursor not adding data, adding only when executing separately游标不添加数据,仅在单独执行时添加
【发布时间】:2019-03-19 19:19:22
【问题描述】:

我有存储过程和游标循环,用于在主表中添加数据问题是我正在将数据从 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

完成此操作后,还有另一个代码正在从 csv 文件批量插入并运行游标循环以在主表中添加数据

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'

你能帮我看看到底哪里出错了

【问题讨论】:

    标签: sql-server tsql cursor dynamic-sql


    【解决方案1】:

    你在第二次提取时忘记做 INTO

    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 是 varchar(200),但存储的 proc 参数只有 varchar(100),@sSQL 的大小只有 100,但您添加了 @ItemsFromCSV。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2012-06-29
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      相关资源
      最近更新 更多