Heart-Profit ERP
October 01, 2024, 07:23:36 pm *
Welcome, Guest. Please login or register.

Login with username, password and session length
News:
 
   Home   Help Login Register  
Pages: [1]
  Print  
Author Topic: Collation SQL Server Database wordt Case Insensitive  (Read 537 times)
0 Members and 0 Guests are viewing this topic.
Heart Informatisering B.V.
Partner
******
Offline Offline

Posts: 27469


View Profile WWW
« on: July 11, 2019, 10:06:36 am »

Als we vanuit Profit (ADS versie) repliceren naar een SQL Server, dan werd op de velden van iedere tabel een Collation aangebracht:  Latin1_General_CS_AS.

Nb: Deze Collation is reeds in 2008 gekozen. Hoewel ze momenteel niet instelbaar is via een Parameter, zou zoiets natuurlijk wel kunnen worden ontwikkeld.

Vanuit Profit is het ook mogelijk om de SQL Server Database aan te maken waarin de Profittabellen worden opgenomen. Op deze SQL Server Database brachten wij voorheen géén Collation aan; w.s. met enige reden omdat nooit gekonstateerd is dat dat nodig was c.q. deze al goed stond omdat indien er géén Collation wordt meegegeven, deze wordt overerfd van de settings van de SQL Server zelf. Eerder deze week hebben we besloten dat als we vanuit Profit een SQL Server Database aanmaken, deze ook dient te worden voorzien van deze Collation. De term _CS_ in de Collation staat voor "Case Sensitive". Dit impliceert dat als we data ophalen uit een tabel, we dit moeten doen met de juiste hoofd- en kleine letters. Als we een Artikelnummer "TEST" opzoeken in de database, dan zullen we moeten filteren op "TEST" en niet op "test". Zou de Collation "Case Insensitive" zijn, dan zouden we wél kunnnen zoeken op "test" (met kleine letters) en krijgen we (ook) "TEST" (met hoofdletter) in het resultaat terug.

De kolommen van een Tabel dienen expliciet met een Case Sensitive Collation te werken. Dit, omdat het bijv. mogelijk is om Artikelnummers óók in kleine letters te registeren in Profit. Een nog duidelijker voorbeeld zal bijv. de Tabel ADGR zijn, waarin Grootboekrekeningen worden geregistreerd met een Rekeningschema "LO", Kostenplaatsen met een Rekeningschema "lo" en Kostensoorten met een Rekeningschema "lO". Zou de kolom "Rekeningschema" Case Insensitive zijn, dan zouden we kunnen zoeken naar een Grootboekrekening, maar krijgen we ook Kostenplaatsen en Kostensoorten in ons resultaat terug. Ook JOIN's vinden op zo'n manier verschillende resultaten, waardoor de antwoorden van SQL Queries gewoon niet meer betrouwbaar zijn.

Ondanks dat de default Collation van de SQL Server (en daarmee die van de Database) op Latin1_General_CI_AS  stond, hebben we met de aanpassing eerder deze week dezelfde Collation op de Database aangebracht als die al sinds 2008 geldt voor de kolommen van de Tabel. Vandaag is gebleken dat dat niet handig is. Een Case Sensitive Collation op de data is op zich "een must", maar, als we de Database zelf ook een "Case Sensitive" maken, zorgt dat ervoor dat we in onze SQL Queries verplicht Tabelnamen en Veldnamen met Hoofdletters moeten invullen. Dat is niet handig, maar feitelijk ook verkeerd, immers, het impliceert ook dat we naast een Tabelnaam "LOAR" met hoofdletters ook een Tabelnaam "loar" met kleine letters zouden kunnen hebben, en dat is natuurlijk niet het geval. M.i.v. heden geldt derhalve:

De SQL Server Database heeft een Collation: Latin1_General_CI_AS. De Columns van de SQL Tabellen werken met: Latin1_General_CS_AS.

Nb: Overigens wordt de Collation voor de SQL Server Database dynamisch afgeleidt uit de (vast) ingestelde Collation; hierin wordt _CS_ vervangen door _CI_. Mocht in de toekomst de Collation alsnog instelbaar worden gemaakt, dan kunnen we volstaan met één Collation.

De Collation op de Database wordt vanuit Profit alléén aangemaakt vanuit het Kreëren van een nieuwe SQL Server Database. Er bestaat een run in Profit waarmee (achteraf) nogmaals expliciet de Collation kan worden aangebracht op de kolommen van de tabellen in die Database, maar, daarmee wijzigen we niet opnieuw de Collation van de Database zelf. Wilt u dus met een andere Collation werken op Database niveau, dan is dat mogelijk, maar, dient u deze Collation zelf te wijzigen. Dit kan bijv. met de SQL Opdracht:

 ALTER DATABASE <DatabaseName> COLLATE <Collation>

FunktieOmschrijvingDtm.Vl.WyzDtm.L.Wyz
SYBHBSSQ    Bestanden SQL-funkties.    22-01-2019    11-07-2019
SYRSXBDB    Omschrijving (nog) niet bekend    09-07-2019    11-07-2019
SYSS        Omschrijving (nog) niet bekend    09-07-2019    11-07-2019
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2005, Lewis Media Valid XHTML 1.0! Valid CSS!
Page created in 0.117 seconds with 20 queries.