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

Phân tích cú pháp biến MS SQL động không chính xác

  1. Sử dụng đúng loại SYSNAME đối với các bộ mã hóa, NVARCHAR(MAX) cho truy vấn
  2. Sử dụng REPLACE thay vì nối, việc gỡ lỗi sẽ dễ dàng hơn nhiều, đặc biệt là khi bạn cần các ký tự chuỗi
  3. Cân nhắc sử dụng QUOTENAME chức năng

Mã:

DECLARE 
    @tableName  SYSNAME,
    @columnName SYSNAME,
    @prompt     VARCHAR(20),
    @dynSQL     NVARCHAR(MAX);

SET @tableName  = QUOTENAME('A1-ExciseESN');
SET @columnName = QUOTENAME('Anode Excise ESN (A1)');

SET @dynSQL = 
N'INSERT INTO  <tableName> 
 ([trav num], <columnName>)
Select [trav num], <columnName>
FROM [temprmi$] t1
PIVOT(min([Lvl1 Trace Data])
FOR [Prompt Text] IN (<columnName>)
   ) AS PVTTable
     where <columnName> is not null 
        and [trav num] not in (select [trav num] from <tableName> )'

SET @dynSQL = REPLACE(REPLACE(@dynSQL, '<tableName>', @tableName),
               '<columnName>', @columnName);

PRINT @dynSQL;

LiveDemo

Đầu ra:

INSERT INTO  [A1-ExciseESN] 
 ([trav num], [Anode Excise ESN (A1)])
Select [trav num], [Anode Excise ESN (A1)]
FROM [temprmi$] t1
PIVOT(min([Lvl1 Trace Data])
FOR [Prompt Text] IN ([Anode Excise ESN (A1)])
   ) AS PVTTable
     where [Anode Excise ESN (A1)] is not null 
       and [trav num] not in (select [trav num] from [A1-ExciseESN] )


  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 2012 sao chép cơ sở dữ liệu không có dữ liệu

  2. Có một điều như là quá nhiều bảng?

  3. Làm cách nào để cải thiện hiệu suất cho tính năng lọc ngày giờ trong SQL Server?

  4. Các giao dịch lồng nhau trong Sql Server

  5. Cấp quyền cho một thủ tục được lưu trữ