我有一對鏈接的SQL Server:ServerA和ServerB。我想寫一個簡單的INSERT INTO SELECT語句,它將從ServerA的數據庫複製一行到ServerB的數據庫。 ServerB的數據庫是直接從服務器A的複製,所以他們應該有相同的基本結構(相同的列名等)SQL INSERT sp_cursor錯誤
的問題是,當我嘗試執行以下語句:
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語句正常工作,但當我告訴它使用「*」複製所有內容時,不能正常工作?我的第二個問題是:我該如何解決這個問題?
通常這表示錯誤的列是標識列。用一個像「價值」這樣的名字,這看起來不太可能,但檢查一下,看看價值是否是一種身份。另外,請仔細檢查兩臺服務器上的列是否相同。 (名稱,數據類型和順序)。 – DeadZone
表中沒有名爲「Value」的列。另外,檢查列實際上是完全相同的最快捷的方法是什麼? (有問題的表格有1000多列,所以這會非常耗時。) – Karasu
檢查[this](http://www.kepware.com/KEP_KB/?solution=/_ui/selfservice/pkb/PublicKnowledgeSolution/d?&id = 50140000000SUKxCsY)out。從閱讀的角度來看,我認爲它與超過1000個列以及INSERT INTO ... SELECT在引擎蓋下工作的方式有關,因此您打破了最大字符長度。如果我有更好的文檔來支持它,而不僅僅是理論,我會提出這個答案。 – LDMJoe