sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan kan jeg indstille identity_insert på et tabelnavn, der sendes som en variabel

Bare for at tage backup af Brads svar i kommentarerne, her er en MVCE til at udføre hele indsættelsessekvensen i en enkelt dynamisk forespørgsel. I henhold til Kris' kommentar skal du sikre dig, at databasenavnet er hvidlistet, da forespørgslen er sårbar over for SqlInjection (desværre kan databasenavne ikke parametreres i dynamisk sql via sp_executesql )

Givet:

CREATE TABLE TableName
(
    ID INT IDENTITY(1,1)
);

En enkelt batch kan udføres:

DECLARE @strDBName VARCHAR(100) = 'MyDatabase';
Declare @Query Varchar(MAX)
SET @Query = 'SET IDENTITY_INSERT '+ @strDBName +'..TableName ON; '
SET @Query = @Query + 'INSERT INTO '+ @strDBName 
 +'..[TableName](ID) SELECT COALESCE(MAX(ID), 0)+1 FROM '+ @strDBName +'..TableName; '
SET @Query = @Query + 'SET IDENTITY_INSERT '+ @strDBName +'..TableName OFF;'
EXEC(@Query)



  1. Dumper MySQL-tabeller til JSON med Golang

  2. SQL forhindrer duplikerede poster, hvis der findes 2 værdier

  3. Hvad er den bedste måde at afkorte en dato i SQL Server?

  4. Hvordan returneres rækker af forespørgselsresultater i PostgreSQL's funktion?