Nếu tôi sử dụng tên cơ sở dữ liệu có dấu chấm trong SQL Server (2005 hoặc 2008), một cái gì đó như "MyApp.Sales", điều này có gây ra vấn đề gì không?
Nếu tôi sử dụng tên cơ sở dữ liệu có dấu chấm trong SQL Server (2005 hoặc 2008), một cái gì đó như "MyApp.Sales", điều này có gây ra vấn đề gì không?
Câu trả lời:
Bạn có thể , nhưng tôi sẽ không. Bạn sẽ luôn phải bọc tên DB bằng dấu ngoặc vuông, chẳng hạn như [MyApp.Sales].
Vì vậy, để tóm tắt lại: nếu bạn coi trọng sự tỉnh táo của mình, đừng làm điều đó.
Tôi nghĩ rằng đó là một ý tưởng rất xấu ngay cả khi về mặt kỹ thuật có thể.
Trong những năm qua, tôi phát hiện ra rằng nhiều người gặp khó khăn trong việc hiểu quy ước đặt tên gồm bốn phần mặc dù có vẻ khá rõ ràng:
server_name.database_name.schema_name.object_name
Hãy tưởng tượng những gì sẽ xảy ra nếu họ thấy một cái gì đó như thế này:
MAIN-SQL.[MyApp.Sales].hr.CompetitorsProducts
hoặc là:
[MAIN-SQL\EXPRESS].[MyApp.Sales].sch_HR.[Products From.Our-Competitors]
Giữ mọi thứ đơn giản là quan trọng.
Trong trường hợp người khác gặp phải câu hỏi này ...
Hãy nhớ rằng đó không chỉ là một ý tưởng tồi bởi vì người dùng có thể bị nhầm lẫn, mà còn bởi vì một số công cụ có thể bị nhầm lẫn.
Ngay cả bản thân Microsoft cũng có vấn đề với điều này. Nếu bạn cố gắng kết nối cơ sở dữ liệu của mình với một bảng excel bằng Microsoft Query (thông qua ODBC), bạn sẽ nhận được một trình hướng dẫn cấu hình cho phép bạn chọn cơ sở dữ liệu bạn muốn kết nối. Tuy nhiên, việc chọn cơ sở dữ liệu chứa dấu chấm sẽ tạo ra lỗi cho biết không thể tìm thấy máy chủ. Có vẻ như trình hướng dẫn không kiểm tra xem các giá trị có cần thoát hay không và kết nối một cách mù quáng các định danh.
Tất nhiên có cách giải quyết, nhưng bạn tự cứu mình một số rắc rối bằng cách không làm điều này ngay từ đầu.
Không sử dụng dấu chấm trong tên cơ sở dữ liệu, tên xuất bản, tên người dùng. Và tôi thực sự khuyên bạn không bao giờ nên sử dụng một khoảng thời gian trong tên (cột, bảng, dạng xem, cơ sở dữ liệu, v.v.).
Cập nhật: Tôi có thể xác nhận rằng dấu trừ, dấu gạch ngang "-" gây ra các vấn đề tương tự.
Đây là những gì xảy ra:
SQL Server sử dụng các tập lệnh để sử dụng nội bộ như các thủ tục lưu trữ hệ thống. Như đã đề cập ở đây, các lệnh bạn sử dụng đôi khi sẽ buộc bạn đặt tên vào ngoặc và đó là (nghiêm túc microsoft?) Không (luôn luôn) ổn cho việc sử dụng thủ tục được lưu trữ .
Trong thực tế, tôi không thể dọn dẹp thông tin kết nối nữa vì thủ tục được lưu trữ lặp đi lặp lại qua tất cả các cơ sở dữ liệu và không thoát khỏi tên cơ sở dữ liệu một cách nhanh chóng. Lặp đi lặp lại là phức tạp mà tôi đã không thể vá nó trong hơn 8 SP.
Thêm vào đó, tôi không thể sử dụng MMC hoặc tập lệnh để chỉnh sửa xung đột sao chép . Nếu bạn có một cơ sở dữ liệu (Một!) Có một dấu chấm bên trong tên của nó, những vấn đề này sẽ xảy ra trên everey db, mỗi ấn phẩm.
Đây là những sự kiện tôi có. Các hành động SQL phức tạp được xử lý bằng ngôn ngữ sql và sẽ hoạt động tốt, nếu cơ sở tốt.
Nếu bạn cố gắng kết nối cơ sở dữ liệu của mình với một bảng excel bằng Microsoft Query (thông qua ODBC), bạn sẽ nhận được một trình hướng dẫn cấu hình cho phép bạn chọn cơ sở dữ liệu bạn muốn kết nối. - aKzenT
Những lỗi này có thể thường xuyên hơn được tìm thấy trong phần mềm của bên thứ 3, vì vậy đừng bao giờ sử dụng dấu chấm trong mỗi tên của bất cứ thứ gì trên máy chủ sql.
Có nhiều ký tự được cho phép trong tên, nhưng, quy ước và ý thức chung giới hạn việc sử dụng các ký tự đặc biệt. '_' (gạch dưới) là dấu tách an toàn nhất đã được chứng minh và duy trì sự dễ đọc.
Thỏa thuận tương tự: tên khóa ngoại không được chứa bất kỳ dấu chấm nào.
Tôi thấy rằng nếu bạn cần đổi tên như vậy thì bạn sẽ cần dấu ngoặc để thực hiện sp_rename
công việc (vì khi đổi tên khóa ngoại, bạn cần chỉ định lược đồ).
Thí dụ:
sp_rename '[MySchema].[MyFKName.With.Dots]' 'NewFKName' 'OBJECT'
Nếu bạn quên dấu ngoặc, bạn sẽ gặp lỗi: 15225
Một trong những nhà cung cấp của chúng tôi đã chọn giới thiệu tên lược đồ: [System.Activities.DurableInstance]. Nó đã phá vỡ công cụ tải dữ liệu của chúng tôi, vì vậy bây giờ chúng tôi đã phát triển hơn nữa để đối phó với sự kỳ lạ của chúng. Đừng làm điều đó. Sử dụng một '-'.
-
khi bạn có thể sử dụng dấu gạch dưới_
và không phải đặt tên trong dấu ngoặc vuông?