sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu nastavit identity_insert na název tabulky předaný jako proměnná

Abychom zálohovali Bradovu odpověď uvedenou v komentářích, zde je MVCE provedení celé sekvence vkládání v jediném dynamickém dotazu. Podle Krisova komentáře se ujistěte, že název databáze je na bílé listině, protože dotaz je zranitelný vůči SqlInjection (bohužel názvy databází nelze parametrizovat v dynamickém sql pomocí sp_executesql )

Vzhledem k:

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

Lze provést jednu dávku:

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. Jaké jsou výhody UPDATE LOW_PRIORITY a INSERT DELAYED INTO?

  2. MySQL LIKE nefunguje s â

  3. Jak převést prázdné na null v PostgreSQL?

  4. Vložit do tabulky z Array PHP