SQL INSERT sp_cursor错误(SQL INSERT sp_cursor Error)

2019-10-23 12:08发布

我有一对链接的SQL服务器:服务器A和ServerB。 我想写一个简单的INSERT INTO SELECT语句将从服务器A的数据库中的行复制到服务器B的数据库。 ServerB的数据库是直接从服务器A的复制,所以他们应该有相同的基本结构(相同的列名等)

问题是,当我尝试执行以下语句:

INSERT INTO [ServerB].[data_collection].[dbo].[table1] SELECT * FROM [ServerA].[data_collection].[dbo].[table1]

我得到以下错误:

Msg 16902, Level 16, State 48, Line 1 sp_cursor: The value of the parameter 'value' is invalid.

在另一方面,如果我尝试执行以下语句:

INSERT INTO [ServerB].[data_collection].[dbo].[table1] (Time) SELECT Time FROM [ServerA].[data_collection].[dbo].[table1]

声明工作得很好,并且按预期执行的代码。 上面的语句执行就好了,不管是哪个或多少表我指定要插入的。

所以在这里我的问题是,为什么会我的INSERT INTO SELECT语句正常工作时,我明确指定的列复制,但不是当我告诉它使用复制一切“*”? 然后我的第二个问题是:我该如何解决这一问题?

Answer 1:

周围的Googling跟进我最初的直觉,我发现我认为足够可靠的答案,引用源。

指定的“价值”参数是不是你的一列,它是可选参数sp_cursor是通过你的INSERT INTO ... SELECT隐式调用。

从SQL Server的中央 ...

我有一个需要填充含有992管道分隔文本文件数据的SQL表的SSIS包(!)每个记录列。 ...最初我建立包到包含一个数据流任务使用该接入模式设置为表或视图模式一个OLE DB目的地控制。 出于某种原因,不过, 在运行包时, 它会崩溃,有一个错误,说明参数“价值”是不是sp_cursor过程中有效 。 有关设置跟踪的探查,看看这个控制实际上做它似乎在试图插入使用sp_cursor过程的记录。 运行在SQL Server Management Studio中相同的查询的结果相同。 许多测试和头发拉出来后,我发现,用一个INSERT语句替换sp_cursor陈述的纪录人口细,这表明当超过一定数目的参数,更多的是试图sp_cursor无法应对 。 不知道这个数字的。

注意共同的主题在这里你的情况和一个引用之间 - 一个bazillion列。

同一来源提供的解决方法为好。

我已经成功通过设置访问模式为“表或视图 - 快速加载”来避开这个问题,但是。 查看跟踪再次确认SSIS通过它加载罚款“批量插入”语句尝试这个。



文章来源: SQL INSERT sp_cursor Error