Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как мога да задам identity_insert на име на таблица, предадено като променлива

Само за да архивирам отговора на Брад, даден в коментарите, ето MVCE за извършване на цялата последователност на вмъкване в една динамична заявка. Според коментара на Крис, уверете се, че името на базата данни е в белия списък, тъй като заявката е уязвима за SqlInjection (за съжаление, имената на базата данни не могат да бъдат параметризирани в динамичен sql чрез sp_executesql )

Дадено:

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

Може да се изпълни една партида:

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. Как да създам и да направя заявка за свързани сървъри на бази данни в SQL Server?

  2. Грешка на SQL Server 4104:Идентификаторът от няколко части не може да бъде обвързан.

  3. Създайте база данни на SQL Server с SQLOPS

  4. Да се ​​изтрие ли един запис от Entity Framework?

  5. LEFT() срещу SUBSTRING() в SQL Server:Каква е разликата?