sql >> Database teknologi >  >> RDS >> Access

Tekst eller numerisk felt - En simpel SQL-metode til at skifte datatype

Tekst eller numerisk felt – en simpel SQL-metode til at skifte datatype

Jeg har for nylig arbejdet på et projekt, hvor vores klient sælger et produkt i hele USA bygget på Access med SQL Server, det virker ved at importere data til SQL og derefter analysere det med Access-rapporter. Desværre kan hver kunde have et primært nøgleformat som et langt heltal, og andre, hvor det er en streng, (kombination af tal og strenge), opdagede vi hurtigt, at det forårsagede problemer med rapporter, der ikke sorterede korrekt. Rapporterne blev designet med heltal i tankerne, og strengene forstyrrede rækkefølgen. Vi var nødt til at finde en løsning, der ikke krævede tilføjelse af kode til vores Access-frontend for at håndtere problemet, men snarere bruge styrken fra SQL Server til at servere dataene uanset hvilket format der blev brugt på den primære nøgle.

Udsigter til undsætning

En god ting ved at forbinde SQL Server-visninger og tabeller i Access:Du kan give dem et hvilket som helst navn, du ønsker. Jeg udnyttede den ved at udelade kilden til den linkede tabel med en visning om den primære nøgle er en streng eller lade den være den originale tabel, hvis den var et heltal. At have de samme tabelnavne i Access uanset kilden betød, at jeg ikke skulle ændre min kode.

Vi driver linkning ved hjælp af en SQL Server-tabel

Juan har blogget om linkning af køretabeller fra SQL Server, hvor vi bruger kode til at læse poster i en tabel kaldet tblTablePermissions til at oprette links i vores Access-frontend ved hjælp af VBA-kode. Normalt linker vi kun i begyndelsen af ​​projektet, eller når en ny tabel tilføjes til serveren, men for dette projekt var jeg nødt til at tage det et skridt videre ved at udskifte tabelnavnet med visningsnavnet i tblTablePermissions, hvis klienten bruger en streng for primærnøgle.

Der er to felter i tblTablePermissions, et kaldet Table_Name og et andet kaldet AccessName, vores kode bruger førstnævnte til at vide, hvilken tabel eller visning der skal bruges som kilde og sidstnævnte for tabelnavnet i Access. Alt, hvad jeg gjorde, var at oprette et simpelt script, som min kunde kan køre for at udskifte tabelnavnene med visningsnavne for hver installation, der havde brug for det.

Her er scriptet, jeg brugte:

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

SLET FRA [dbo].[tblTablePermissions]
HVOR [Tabel_navn] =('tabelnavn1')
eller [Tabelnavn] =('tabelnavn2')
eller [Tabelnavn] =('tabelnavn3' )

IINSERT INTO [dbo].[tblTablePermissions] ([Tabel_navn], [Adgangsnavn], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
VÆRDIER ('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')
GO

I mit script ovenfor sletter jeg først tabellerne fra tblTablePermissions, som jeg ønsker at bytte med visninger, og derefter bruger jeg en insert-sætning til at tilføje visningerne, der erstatter tabellerne. Bemærk, at visningsnavnene er forskellige, men feltet Access_Name er det samme som dem slettet, hvilket tillader min adgangskode at fungere, uanset hvilken primærnøglefelttype der bruges.

Hvordan jeg brugte CAST til at oversætte den primære nøgle

I visningerne brugte jeg CAST-funktionen til at konvertere feltet Type fra en streng til et heltal:

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

Vores klient kan nu nemt konfigurere hver installation baseret på kundens data!


  1. Autoincrement i oracle til allerede oprettet tabel

  2. skal jeg aktivere c3p0 statement pooling?

  3. INDIEN, STD Code Finder Script i PHP, MYSQL, JQUERY

  4. Sådan slutter du dig til første række