sql >> Database >  >> RDS >> Access

Tekst of numeriek veld - Een eenvoudige SQL-methode om van gegevenstype te wisselen

Tekst of numeriek veld – Een eenvoudige SQL-methode om van gegevenstype te wisselen

Ik heb onlangs aan een project gewerkt waarbij onze klant in de VS een product verkoopt dat is gebouwd op Access met SQL Server. Het werkt door gegevens in SQL te importeren en deze vervolgens te analyseren met Access-rapporten. Helaas kan elke klant een primaire sleutelindeling hebben als een lang geheel getal en andere waar het een tekenreeks is (combinatie van cijfers en tekenreeksen), ontdekten we al snel dat dit problemen veroorzaakte met rapporten die niet correct werden gesorteerd. De rapporten zijn ontworpen met gehele getallen in gedachten en de strings hebben de volgorde verpest. We moesten een oplossing bedenken waarvoor geen code aan onze Access-frontend hoefde te worden toegevoegd om het probleem op te lossen, maar waarbij we de kracht van SQL Server moesten gebruiken om de gegevens weer te geven, ongeacht het formaat dat op de primaire sleutel wordt gebruikt.

Zicht voor de redding

Een mooi ding over het koppelen van SQL Server-views en tabellen in Access:u kunt ze elke gewenste naam geven. Ik heb het gebruikt door de bron van de gekoppelde tabel te gebruiken met een weergave of de primaire sleutel een string is of laat het als de originele tabel als het een geheel getal was. Het hebben van dezelfde tabelnamen in Access, ongeacht de bron, betekende dat ik mijn code niet hoefde te wijzigen.

We sturen koppelingen aan met behulp van een SQL Server-tabel

Juan heeft geblogd over het koppelen van tabellen vanuit SQL Server, waarbij we code gebruiken om records te lezen in een tabel met de naam tblTablePermissions om de links in onze Access-frontend te maken met behulp van VBA-code. Gewoonlijk koppelen we alleen aan het begin van het project of wanneer een nieuwe tabel aan de server wordt toegevoegd, maar voor dit project moest ik een stap verder gaan door de tabelnaam uit te wisselen met de weergavenaam in tblTablePermissions als de client een tekenreeks voor primaire sleutel.

Er zijn twee velden in tblTablePermissions, een met de naam Table_Name en een andere met de naam AccessName. Onze code gebruikt de eerste om te weten welke tabel of weergave als bron moet worden gebruikt en de laatste voor de tabelnaam in Access. Het enige wat ik deed was een eenvoudig script maken dat mijn klant kan uitvoeren om de tabelnamen uit te wisselen met weergavenamen voor elke installatie die het nodig had.

Dit is het script dat ik heb gebruikt:

--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

VERWIJDEREN VAN [dbo].[tblTablePermissions]
WHERE [Table_Name] =('tablename1')
of [Table_Name] =('tablename2')
of [Table_Name] =('tablename3' )
GO
IINSERT INTO [dbo].[tblTablePermissions] ([Table_Name], [Access_Name], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
VALUES ('vw_tablename1', 'tablename1', ”, 'True', 'True', 'True', 'True'),
('vw_tablename2', 'tablename2', 'field1,field2,field3 ', 'True', 'True', 'True', 'True'),
('vw_tablename3', 'tablename3', 'field1,field2', 'True', 'True', 'True', 'True')
GA

In mijn script hierboven verwijder ik eerst de tabellen uit tblTablePermissions die ik wil verwisselen met views en dan gebruik ik een insert-statement om de views toe te voegen die de tabellen zullen vervangen, merk op dat de namen van de views anders zijn, maar het veld Access_Name is hetzelfde als de die zijn verwijderd, waardoor mijn toegangscode kan werken, ongeacht welk type primaire sleutelveld wordt gebruikt.

Hoe ik CAST heb gebruikt om de primaire sleutel te vertalen

In de views heb ik de CAST-functie gebruikt om het veld Type te converteren van een string naar een geheel getal:

CREATE VIEW vw_tablename1
AS
SELECT RangeID,
UseFlagAsNeeded,
CAST(Type AS int) AS Type,
Line,
Ownership,
Include,
Public,
Limit,
RangeA,
RangeB,
RangeC,
SSMA_TimeStamp
FROM dbo.tablename1;
GO

Onze klant kan nu elke installatie eenvoudig configureren op basis van de gegevens van de klant!


  1. Beperking wijzigen?

  2. Normaliseer array-subscripts voor 1-dimensionale array, zodat ze beginnen met 1

  3. MS SQL Server op Linux versus Windows Prestatietest om het verschil te ontdekken

  4. Een kolom neerzetten met een beperking in SQL Server