Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để tôi có thể đặt ID_insert trên tên bảng được truyền dưới dạng một biến

Chỉ để sao lưu câu trả lời của Brad được đưa ra trong các nhận xét, đây là MVCE thực hiện toàn bộ trình tự chèn trong một truy vấn động duy nhất. Theo nhận xét của Kris, hãy đảm bảo rằng tên cơ sở dữ liệu được liệt kê trắng, vì truy vấn dễ bị tấn công bởi SqlInjection (rất tiếc, tên cơ sở dữ liệu không thể được tham số hóa trong sql động thông qua sp_executesql )

Đã cho:

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

Một lô duy nhất có thể được thực hiện:

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. Kiểu dữ liệu dotNet gốc nào thích hợp nhất để truyền tải các giá trị SQL Server hierarchyId?

  2. Cách trích xuất dữ liệu từ cột xml trong sql 2008

  3. DATETIMEOFFSETFROMPARTS () Ví dụ trong SQL Server (T-SQL)

  4. SQL Server 2008 không thể bỏ ràng buộc

  5. Cập nhật trường XML không có văn bản trong T-SQL