Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak mogę ustawić identity_insert na nazwę tabeli przekazaną jako zmienna?

Aby poprzeć odpowiedź Brada podaną w komentarzach, oto MVCE wykonania całej sekwencji wstawiania w jednym dynamicznym zapytaniu. Zgodnie z komentarzem Krisa, upewnij się, że nazwa bazy danych znajduje się na białej liście, ponieważ zapytanie jest podatne na SqlInjection (niestety, nazw baz danych nie można sparametryzować w dynamicznym sql za pomocą sp_executesql )

Biorąc pod uwagę:

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

Można wykonać jedną partię:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Subskrypcje SSRS Powielanie wiadomości e-mail

  2. Jaki jest najlepszy sposób na zaimplementowanie asocjacji polimorficznej w SQL Server?

  3. Klucz podstawowy SQL może akceptować „0”?

  4. Co to jest prosty program lub skrypt wiersza poleceń do tworzenia kopii zapasowych baz danych serwera SQL?

  5. SQL Server ze starymi wersjami procedur składowanych