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

Thoát khỏi báo giá đơn trong SQL Server

Một lời khuyên. Khi kiểm tra một tập lệnh động, trước tiên chỉ cần hiển thị nó thay vì thực thi nó. Bằng cách đó, bạn sẽ có thể thấy nó chính xác như những gì được thấy bởi EXEC tuyên bố.

Bây giờ đến vấn đề. Bạn nên nhớ rằng bạn không chuyển biến thành SplitValues mà thay vào đó là nối giá trị của biến vào tập lệnh. Vì giá trị là varchar , nó nên được nối với dấu ngoặc kép xung quanh nó. Sự vắng mặt của chúng thực sự là vấn đề duy nhất.

Các dấu ngoặc kép xung quanh đối số thứ hai, dấu phẩy, được thoát đúng trong cả hai trường hợp . Vì vậy, chỉ cần sử dụng một trong các phương pháp để thêm dấu ngoặc kép xung quanh đối số đầu tiên:

  • sự lặp lại của dấu ngoặc kép:

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(''' + @year + ''','','')';
    SELECT @sql;
    
  • sử dụng CHAR(39) :

    DECLARE @year varchar(max), @sql varchar(max);
    SET @year = '111,11';
    SET @sql = 'SELECT * FROM SplitValues(' + CHAR(39) + @year + CHAR(39) + ',' + CHAR(39) + ',' + CHAR(39) + ')';
    SELECT @sql;
    

Rõ ràng, phương pháp đầu tiên nhỏ gọn hơn, nhưng như tôi đã nói, cả hai đều hoạt động tốt, như bản demo SQL Fiddle này cho thấy rõ ràng.

Tuy nhiên, lưu ý rằng bạn có thể dễ dàng thoát khỏi vấn đề này ngay từ đầu, nếu bạn tha thứ cho cách chơi chữ. Thay vì EXEC () , bạn có thể sử dụng EXEC sp_executesql , cho phép bạn sử dụng tham số . Đây là cùng một tập lệnh được viết lại để sử dụng sp_executesql :

DECLARE @year varchar(max), @delim char(1);
SET @year = '111,11';
SET @delim = ',';
EXEC sp_executesql
  N'SELECT * FROM SplitValues(@year_param,@delim_param)',
  N'@year_param varchar(max), @delim_param char(1)',
  @year,@delim;

Như bạn có thể thấy, không cần phải lo lắng về việc thoát khỏi các dấu ngoặc kép:SQL Server gặp khó khăn trong việc thay thế các giá trị một cách chính xác, không phải bạn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một bảng SQL Server từ một dữ liệu C #

  2. Kiến trúc SQL Server AlwaysOn (Nhóm khả dụng) và Cài đặt từng bước -1

  3. Ví dụ trong cuộc sống thực, khi nào sử dụng ÁP DỤNG NGOÀI / CHÉO trong SQL

  4. Làm thế nào để lấy ngày đầu tiên và ngày cuối cùng của năm hiện tại?

  5. Nội bộ của bảy loại máy chủ SQL - Phần 2