Fix get_columns_in_relation datatypes for UNICODE datatypes#329
Open
tkirschke wants to merge 1 commit intomicrosoft:mainfrom
Open
Fix get_columns_in_relation datatypes for UNICODE datatypes#329tkirschke wants to merge 1 commit intomicrosoft:mainfrom
tkirschke wants to merge 1 commit intomicrosoft:mainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue
UNICODE datatypes (
nvarchar,nchar,sysname) need two bytes per character.If a source column has the datatype
nvarchar(4000), thesys.columnsshowsmax_length= 8000, because it reflects the number of bytes required to store this value, see docs (here)[https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-columns-transact-sql?view=sql-server-ver17].Since this is used to return the datatypes, the wrong datatype
nvarchar(8000)is returned, which would actually cause errors, at least in MSSQL.What's changed
Instead of just forwarding
sys.columns.max_length, I have added aCASE WHENthat checks for the datatype. If the datatype is a UNICODE datatype (nvarchar,nchar,sysname), themax_lengthis divided by 2, unlessmax_lengthis set to-1, because that value is used to indicateMAX.