sql >> Databasteknik >  >> RDS >> Sqlserver

Hur kan jag ställa in identity_insert på ett tabellnamn som skickas som en variabel

Bara för att backa upp Brads svar i kommentarerna, här är en MVCE för att göra hela infogningssekvensen i en enda dynamisk fråga. Enligt Kris kommentar, se till att databasnamnet är vitlistat, eftersom frågan är sårbar för SqlInjection (tyvärr kan databasnamn inte parametriseras i dynamisk sql via sp_executesql )

Givet:

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

En enda batch kan köras:

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. MySQL WHERE Datum> 15 dagar

  2. Endast variabler kan skickas med referens - php

  3. Oracle ersätter asterisk för alla kolumner i en vy

  4. Hur man delar en sträng i SQL Server