'||' chắc chắn hoạt động trong Oracle, mặc dù không rõ ràng là SQL Server. (Đối với những người đến sau chúng tôi, đây là một hòn đá Rosetta cho SQL: SQL Dialects Reference)
Nếu bạn đang sửa chữa lên kịch bản SQL, tôi sẽ xem xét các giải pháp sau đây:
TRƯỚC:
sql-shell-command < sql-file.sql
(sql-file chứa '+' nhà khai thác)
SAU:
ansi-sql-shell-command < sql-file.sql
sed -e 's/||/\+/' < sql-file.sql | ms-sql-shell-command
(sql-file chứa các toán tử '||', bạn phải chuyển đổi tệp của mình)
Ý tưởng là bạn bắt đầu với SQL ở một định dạng, và trong trường hợp đặc biệt, bạn chạy bộ lọc qua nó chuyển nó sang định dạng khác. Về mặt lý thuyết, bạn có thể biến tất cả '+' es thành '||', nhưng vì một tỷ lệ tốt trong số đó có thể là số-thêm chứ không phải là chuỗi nối, điều đó cũng không có khả năng hoạt động.
Độ phức tạp của bộ lọc phụ thuộc vào những gì bạn đang làm. Nếu bạn có dữ liệu tùy ý trong SQL của bạn, thì bạn phải có nó để tránh thay thế bằng chuỗi. Nhưng nếu bạn đang thiết lập quan điểm thì có lẽ nó sẽ ổn.
Bạn có thể sử dụng kỹ thuật tương tự trong các chương trình trong đó SQL nằm trong chuỗi - viết một hàm trong chương trình để biến nó từ dạng này sang dạng khác.
tại sao tất cả cơ sở dữ liệu phải có cùng cú pháp? nếu tất cả đều giống nhau, thì sẽ chỉ có một. tất cả các ngôn ngữ ứng dụng đều có cú pháp khác nhau? –
Tất cả các trình biên dịch C phân tách cú pháp giống nhau, tại sao các trình phân tích cú pháp SQL không làm như vậy? – ijw
SQL Server và Sybase sử dụng ngôn ngữ TSQL và Oracle sử dụng ngôn ngữ PL/SQL. TSQL khác với PL/SQL. –