> For the complete documentation index, see [llms.txt](https://kythuat.dtechvn.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kythuat.dtechvn.com/sql-server/insert-tables.md).

# Insert tables

## LẤY DANH SÁCH CÁC CỘT TRONG BẢNG

```sql
// Lấy danh sách các cột trên bảng DuLieuKeToan
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'DuLieuKeToan'
ORDER BY ORDINAL_POSITION
```

```sql
// Lấy danh sách các cột trên bảng DuLieuKetoan đưa vào 1 chuỗi cách nhau dấu phẩy
// A,B,C,D....
SELECT STUFF(CAST((
  SELECT ', ' + COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME = 'DuLieuKeToan'
  FOR XML PATH(''), TYPE) AS
VARCHAR(MAX)), 1, 2, '') AS columns
```

```sql
// Lấy danh sách các cột trên bảng DuLieuKetoan đưa vào 1 chuỗi cách nhau dấu phẩy
// A nvarchar(3),B numeric(19,0),C DateTime(12),D nvarchar(100)....
SELECT STUFF(CAST((
  SELECT ', ' + COLUMN_NAME + ' ' + 
    CASE WHEN CHARACTER_MAXIMUM_LENGTH > 0 THEN DATA_TYPE + '(' + CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR(255))+ ')' 
    WHEN NUMERIC_PRECISION > 0 THEN DATA_TYPE + '(' + CAST(NUMERIC_PRECISION AS VARCHAR(10)) + CASE WHEN NUMERIC_SCALE > 0 THEN ',' + CAST(NUMERIC_SCALE AS VARCHAR(10)) ELSE '' END + ')'
    ELSE DATA_TYPE END
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_NAME = 'DuLieuKeToan'
  FOR XML PATH(''), TYPE) AS
VARCHAR(MAX)), 1, 2, '') AS columns
```

```sql
--// CHUYỂN DANH MỤC VỤ VIỆC SANG CÔNG TRÌNH:
-- Kiểm tra 2 danh mục trước
select donvi,ma,ten,khachhang,giatri,tungay,denngay,ngayky from vuviec

select donvi,ma,ten,khachhang,giatri,tungay,denngay,ngayky from Congtrinh
--Thực hiện insert
insert into Congtrinh(donvi,ma,ten,khachhang,giatri,tungay,denngay,ngayky,congtrinh)
select 1 as donvi,ma,ten,khachhang,giatri,tungay,denngay,ngayky,vuviec as congtrinh 
from vuviec 
where vuviec<>0

-- Tắt IDENTITY_INSERT đi để INSERT vào được
SET IDENTITY_INSERT CongTrinh OFF 

-- Bật lại IDENTITY_INSERT
SET IDENTITY_INSERT CongTrinh ON


```

## INSERT DANH MỤC BẤT KỲ TỪ DATABASE TEST

```sql
USE DTECHKK;
GO

DECLARE @TableName NVARCHAR(128) = 'KhachHang'; -- 1. CHỈ CẦN THAY TÊN BẢNG TẠI ĐÂY

-- Các biến bổ trợ để xử lý chuỗi
DECLARE @ColumnList NVARCHAR(MAX);
DECLARE @DynamicSQL NVARCHAR(MAX);

-- 2. Tự động lấy danh sách cột (hỗ trợ mọi phiên bản SQL Server)
SELECT @ColumnList = STUFF((
    SELECT ', ' + QUOTENAME(COLUMN_NAME)
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = @TableName
      -- Loại bỏ cột tự động tăng (Identity)
      AND COLUMNPROPERTY(OBJECT_ID(@TableName), COLUMN_NAME, 'IsIdentity') = 0
    FOR XML PATH('')
), 1, 2, '')

-- 3. Tự động ráp thành câu lệnh INSERT hoàn chỉnh
SET @DynamicSQL = '
    INSERT INTO ' + QUOTENAME(@TableName) + ' (' + @ColumnList + ') 
    SELECT ' + @ColumnList + ' 
    FROM [TEST].dbo.' + QUOTENAME(@TableName) + ' 
    WHERE ' + QUOTENAME(@TableName) + ' > 0;
';

-- 4. Thực thi câu lệnh đã được tạo tự động
EXEC sp_executesql @DynamicSQL;

-- (Tùy chọn) Xem câu lệnh vừa chạy trông như thế nào bằng cách bỏ comment dòng dưới:
-- PRINT @DynamicSQL;
```
