sql >> Database >  >> RDS >> Sqlserver

Hoe kan ik identity_insert instellen op een tabelnaam die als variabele is doorgegeven?

Om een ​​back-up te maken van Brad's antwoord in de opmerkingen, hier is een MVCE van het doen van de hele invoegreeks in een enkele dynamische query. Zorg er volgens de opmerking van Kris voor dat de databasenaam op de witte lijst staat, omdat de query kwetsbaar is voor SqlInjection (helaas kunnen databasenamen niet worden geparametriseerd in dynamische sql via sp_executesql )

Gegeven:

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

Een enkele batch kan worden uitgevoerd:

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. dbms_output.put_line

  2. Mysql, PDO - Like-statement werkt niet met bindParam

  3. mysql REGEXP komt niet overeen

  4. PHP XML:Illegale Offset, maar het is in een array?