已經使用Stack Overflow作爲資源數百次,但我第一次發佈一個問題尋求幫助!無法查詢Access 2010中的nVarChar(Max)字段
我在SQL Server 2005中有一個包含4個nVarChar(Max)字段的表。 我試圖使用ADO 2.8 我使用的是SQL司機SQLNCLI10
(我不能使用鏈接表連接的訪問(2010)VBA模塊中拔出的數據,作爲「表」我最終將被查詢是一個表值函數)
當我然後打印/使用記錄,該數據是越來越混亂,並與在相同的記錄等領域級聯 - 與一堆在拋出晦澀字符
VBA:(其他各種方法都嘗試過相同的結果)
Sub TestWithoutCasting()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Integer
cn.Open "Data Source=ART;DataTypeCompatibility=80;MARS Connection=True;"
Set rs = cn.Execute("SELECT * FROM JobDetail WHERE JobID = 2558 ORDER BY SeqNo ASC")
Do While Not rs.EOF
For i = 1 To rs.Fields.Count
Debug.Print rs.Fields(i).Name & ": " & rs.Fields(i).Value
Next i
rs.MoveNext
Loop
End Sub
輸出示例:
SeqNo: 1
CommandID: 2
Parameter1: 2 Daily Report é [& some other chars not showing on here]
Parameter2: [Null]
Parameter3: [Null]
Parameter4: [Null]
Description: Daily Report
Active: False
預期輸出:
SeqNo: 1
CommandID: 2
Parameter1: SELECT Day_Number ,Day_Text ,Channel_Group_ID [...etc]
Parameter2: [Null]
Parameter3: [Null]
Parameter4: [Null]
Description: Daily Report
Active: False
所以,它抓住其他領域,而不是正確數據的數據位(在這種情況下,它是一個SQL語句)
然後我試着在源文件中輸入nvarchar(max)字段作爲文本
查看Creat編輯:
CREATE VIEW TestWithCast
AS
SELECT jd.JobID, jd.SeqNo, jd.CommandID
,cast(jd.Parameter1 as text) as Parameter1
,cast(jd.Parameter2 as text) as Parameter2
,cast(jd.Parameter3 as text) as Parameter3
,cast(jd.Parameter4 as text) as Parameter4
,jd.[Description]
,jd.Active
FROM JobDetail jd
現在,我最初有一些運氣在這裏 - 使用與上述相同的代碼並帶回數據 - 但是當我在我的主代碼中使用此代碼(跳躍&出的其他程序);只要我查詢了記錄集的第一個結果,它就會擦除剩餘的記錄/字段,並將它們設置爲Null。我還嘗試將每個字段的值設置爲一個變量,而其餘的vba在獲取下一條記錄之前運行 - 但這也無濟於事。
它幾乎感覺就像我需要將記錄集轉儲到本地Access表中,並從那裏查詢 - 這是針對已經是解決方法(通過作爲文本強制轉換)的解決方案的解決方法。
我在那裏我完全缺少這裏,或者我確實需要將文本和加載到本地表嗎?
感謝您的任何幫助 - 這讓我生氣!
ps。希望我已經提供了正確的詳細信息/信息 - 請讓我知道是否我錯過了任何關鍵。
編輯:
哎呀,我覺得我已經做到了/發現問題... 我改變了司機SQLSRV32(V6.01) - ,似乎對文本鑄造領域的工作直接罰款。 所以...爲什麼它會使用較舊的驅動程序,而不是較新的「推薦」(我讀過的各種資源)作爲使用的驅動程序。 而且......在本地客戶端上使用它會有什麼重大缺陷?
編輯2:
好吧,我試過的幾個機器的幾個司機,在每種情況下同時與TEXT鑄造和直接到VARCHAR MAX ..在我的Windows 7機器
[ W/SQLSMS 2008]
SQL Native Client的10.0 - 這兩種方法都與此驅動程序 的SQL Server 6.01可靠地工作 - 這兩種方法似乎可靠地工作 - 進一步的測試需要,雖然
[我們的生產服務器瓦特/ SQL S 2005]
SQL Native Client(v2005.90) - 根本無法使用varchar(max),但可以使用文本轉換 SQL Server(v2008.86) - 這兩種方法似乎可以可靠地工作 - 進一步測試需要儘管
這應該使部署有趣!
值得一試:停止使用'SELECT *'([你應該停止這樣做](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits-to-kick -use-select-omitting-the-column-list.aspx)),爲你的列命名並且命名最後的'NVARCHAR(MAX)'。這可能會導致[與我多年前寫的TEXT/NTEXT類似的問題](http://databases.aspfaq.com/database/how-do-i-deal-with-memo-text-hyperlink-和貨幣columns.html)。 – 2013-03-06 14:42:43
謝謝Aaron - 只用Select *作爲例子 - 通常不會馬虎!我曾嘗試過使用字段順序,但所有4個'Parameter'字段都是nvarchar(max) - 每個記錄中都會填充不同的字符 - 有時候只有其中的一個,有時全部。 (ps,有趣的文章,謝謝 - 閱讀雖然他們) – aldredd 2013-03-06 15:03:12