Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQLServer 2012 में varbinary(MAX) फ़ील्ड अपडेट करें पिछले 4 बिट खो गया

ऐसा लगता है कि बाइनरी स्थिरांक 0xFFD8F...6DC0676 जिसे आपने अपडेट के लिए उपयोग किया है उसमें विषम संख्या में हेक्स अंक हैं। और SqlServer ने पैटर्न की शुरुआत में आधा-बाइट जोड़ा ताकि यह बाइट्स की पूरी संख्या का प्रतिनिधित्व करे।

आप निम्न सरल क्वेरी को चलाकर समान प्रभाव देख सकते हैं:

select 0x1, 0x104

यह 0x01 return लौटाएगा और 0x0104

कटौती SSMS में कुछ सीमाओं के कारण हो सकती है, जिसे निम्नलिखित प्रयोग में देखा जा सकता है:

declare @b varbinary(max)
set @b = 0x123456789ABCDEF0
set @b = convert(varbinary(max), replicate(@b, 65536/datalength(@b)))
select datalength(@b) DataLength, @b Data

लौटाए गए परिणाम 65536 हैं और 0x123456789ABCDEF0...EF0123456789ABCD , हालांकि अगर एसएसएमएस में मैं डेटा कॉलम कॉपी करता हूं तो मुझे 43677 वर्णों की लंबाई का पैटर्न मिल रहा है (यह 0x के बिना है), जो 21838.5 बाइट्स प्रभावी ढंग से है। तो ऐसा लगता है कि आपको (यदि आप करते हैं) एसएसएमएस में कॉपी/पेस्ट के माध्यम से प्राप्त लंबे बाइनरी डेटा मानों पर भरोसा नहीं करना चाहिए।

विश्वसनीय विकल्प मध्यवर्ती चर का उपयोग किया जा सकता है:

declare @data varbinary(max)
select @data = DataXXX from Table_XXX where ID = XXX
update Table_YYY set DataYYY = @data where ID = YYY



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में वर्षों से स्ट्रिंग एकत्रीकरण

  2. मैं किसी XML कॉलम से उस रिकॉर्ड पर वापस कैसे जुड़ सकता हूँ जिससे यह उत्पन्न हुआ है?

  3. ब्रेंट ओजर SQL सर्वर आंतरिक और बाहरी विखंडन की व्याख्या करता है

  4. JSON_VALUE () SQL सर्वर में उदाहरण (T-SQL)

  5. Sql Server 2008 sp_executesql सिंटैक्स सहायता - मुझे लगता है कि मेरे उद्धरण सही नहीं हैं