sql >> Database >  >> RDS >> Sqlserver

Alternatief voor functie voor dynamische SQL

Een optie zou zijn om een ​​weergave te maken van alle project_xxx-tabellen. Iets als:

CREATE VIEW SecurityTable
AS
SELECT 'Project_1', User, HasAccess
FROM   Project_1
UNION
SELECT 'Project_2', User, HasAccess
FROM   Project_2
UNION
SELECT 'Project_3', User, HasAccess
FROM   Project_3
etc...

Dan kunt u eenvoudig uw mening opvragen alsof de database in de eerste plaats goed is ontworpen;-)

SELECT ProjectID, User
FROM   SecurityTable
WHERE [criteria]
AND   HasAccess=1

Aangezien u aangeeft dat u regelmatig nieuwe projecttabellen zult toevoegen, raad ik u aan om elke ochtend een beveiligingstabel te laten vullen met een dynamische query. Bijvoorbeeld:
CREATE TABLE Project_1 (
    Usr varchar(20),
    HasAccess bit)
GO
CREATE TABLE Project_2 (
    Usr varchar(20),
    HasAccess bit)
GO
CREATE TABLE SecurityTable (
    Usr varchar(20),
    HasAccess bit)
GO


INSERT INTO Project_1 (Usr, HasAccess) VALUES ('Kermit', 1)
INSERT INTO Project_1 (Usr, HasAccess) VALUES ('MissPiggy', 1)
INSERT INTO Project_2 (Usr, HasAccess) VALUES ('Beaker', 1)
INSERT INTO Project_2 (Usr, HasAccess) VALUES ('TheCount', 0)
GO

Create Procedure LoadSecurityTable 
AS
    DELETE * FROM SecurityTable

    EXEC sp_MSForEachTable 
        @command1 = 'INSERT INTO SecurityTable (Usr, HasAccess) SELECT Usr, HasAccess FROM ?',
        @whereand = 'AND o.name LIKE ''Project_%'''
GO

EXEC LoadSecurityTable
SELECT * FROM SecurityTable


  1. Voeg ontbrekende maand toe aan resultaat met waarden van vorige maand

  2. Snel vergelijkbare strings vinden met PostgreSQL

  3. Hoe de Postgres-functie aan te roepen die een SETOF-record retourneert?

  4. Verstuur e-mails met bijlagen in SQL Server (T-SQL)