游标不添加数据,只在单独执行时添加
cursor not adding data, adding only when executing separately
我有存储过程和游标循环,我用它在主程序中添加数据 table 问题是我正在将数据从 csv 文件添加到临时文件 table 和从临时文件 table到主要 table
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 文件进行批量插入,运行 游标循环用于在主 table
中添加数据
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'
你能帮我看看哪里出了问题吗
您忘记在第二次提取中执行 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
到它。
我有存储过程和游标循环,我用它在主程序中添加数据 table 问题是我正在将数据从 csv 文件添加到临时文件 table 和从临时文件 table到主要 table
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 文件进行批量插入,运行 游标循环用于在主 table
中添加数据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'
你能帮我看看哪里出了问题吗
您忘记在第二次提取中执行 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
到它。