Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL插入sp_游标错误_Sql_Sql Server 2012_Sql Insert_Insert Into - Fatal编程技术网

SQL插入sp_游标错误

SQL插入sp_游标错误,sql,sql-server-2012,sql-insert,insert-into,Sql,Sql Server 2012,Sql Insert,Insert Into,我有一对链接的SQL服务器:ServerA和ServerB。我想在SELECT语句中编写一个简单的INSERT语句,它将一行从ServerA的数据库复制到ServerB的数据库。ServerB的数据库是直接从ServerA复制的,因此它们应该具有完全相同的基本结构(相同的列名等) 问题是,当我尝试执行以下语句时: 插入到[ServerB].[data_collection].[dbo].[table1] 从[ServerA].[data_collection].[dbo].[table1]中选择

我有一对链接的SQL服务器:ServerA和ServerB。我想在SELECT语句中编写一个简单的INSERT语句,它将一行从ServerA的数据库复制到ServerB的数据库。ServerB的数据库是直接从ServerA复制的,因此它们应该具有完全相同的基本结构(相同的列名等)

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

插入到[ServerB].[data_collection].[dbo].[table1]
从[ServerA].[data_collection].[dbo].[table1]中选择*

我得到以下错误:

Msg 16902,第16级,第48州,第1行
sp\u游标:参数“value”的值无效。

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

插入到[ServerB].[data_collection].[dbo].[table1](时间)
从[ServerA].[data_collection].[dbo].[table1]中选择时间

该语句工作正常,代码按预期执行。无论我指定插入哪个表或插入多少表,上面的语句都执行得很好


所以我这里的问题是,当我显式地指定要复制的列时,为什么INSERT INTO SELECT语句能够正常工作,而当我告诉它使用“*”复制所有内容时却不能正常工作?我的第二个问题是:我如何解决这个问题?

< P> Google围绕我最初的直觉进行跟踪,我找到了一个我认为可靠的答案来引用答案。

指定的“value”参数不是您的列之一,它是可选的参数,通过您的INSERT INTO…SELECT隐式调用

我有一个ssis包,需要用数据填充sql表 来自管道分隔的文本文件,每个记录包含992(!)列。 …最初,我会将包设置为包含要使用的数据流任务 访问模式设置为表的ole db目标控件 或查看模式。但是,由于某种原因,当运行包时 将崩溃,并出现一个错误,说明参数“value”无效 在sp_光标程序中。在探查器中设置跟踪以查看 此控件实际执行的操作似乎是尝试插入 使用sp_游标程序记录。在SQL中运行相同的查询 ServerManagementStudio给出了相同的结果。经过多次测试和测试 拔出头发,我发现通过替换sp_光标 语句与insert语句一起填充的记录 表明sp_光标无法处理超过某个数字的情况 尝试了个参数。我不确定这个数字

请注意你的情况和引用的情况之间的共同主题——无数专栏

同样的来源也提供了一种解决方法

不过,通过设置访问权限,我成功地绕过了这个问题 模式为“表格或视图-快速加载”。再次查看跟踪 确认SSIS通过“insert bulk”语句尝试执行此操作 很好


Google四处追踪我最初的预感,我找到了一个我认为可靠的来源来引用答案。

指定的“value”参数不是您的列之一,它是可选的参数,通过您的INSERT INTO…SELECT隐式调用

我有一个ssis包,需要用数据填充sql表 来自管道分隔的文本文件,每个记录包含992(!)列。 …最初,我会将包设置为包含要使用的数据流任务 访问模式设置为表的ole db目标控件 或查看模式。但是,由于某种原因,当运行包时 将崩溃,并出现一个错误,说明参数“value”无效 在sp_光标程序中。在探查器中设置跟踪以查看 此控件实际执行的操作似乎是尝试插入 使用sp_游标程序记录。在SQL中运行相同的查询 ServerManagementStudio给出了相同的结果。经过多次测试和测试 拔出头发,我发现通过替换sp_光标 语句与insert语句一起填充的记录 表明sp_光标无法处理超过某个数字的情况 尝试了个参数。我不确定这个数字

请注意你的情况和引用的情况之间的共同主题——无数专栏

同样的来源也提供了一种解决方法

不过,通过设置访问权限,我成功地绕过了这个问题 模式为“表格或视图-快速加载”。再次查看跟踪 确认SSIS通过“insert bulk”语句尝试执行此操作 很好


通常这表示出错的列是标识列。对于“Value”这样的名称,这似乎不太可能,但请检查一下,看看Value是否是一个标识。另外,仔细检查两台服务器上的列是否完全相同。(名称、数据类型和顺序)表中没有名为“Value”的列。另外,检查列是否完全相同的最快方法是什么?(有问题的表有1000多个列,因此这将非常耗时。)签出。从阅读中,我认为这与超过1000列的事实有关,而且插入到…选择的方式在引擎盖下工作,你正在打破最大字符长度。如果我有更好的文档来支持它,而不仅仅是一个理论,我会提出这个答案。我只是对生成数据的程序进行了快速检查-它生成了766列,而不是我之前假设的1000多列。我运行了红门比较工具,这表明这两个数据库是完全相同的。通常这表示出错的列是标识列。对于“Value”这样的名称,这似乎不太可能,但请检查一下,看看Value是否是一个标识。还有,d