Đối số đầu tiên cho thủ tục lưu trữ hệ thống sp_helptext
là:
[
@objname
= ] 'name'
Là tên đủ điều kiện hoặc không đủ tiêu chuẩn của một đối tượng trong phạm vi lược đồ do người dùng định nghĩa. Dấu ngoặc kép chỉ được yêu cầu nếu một đối tượng đủ điều kiện được chỉ định. Nếu một tên đủ điều kiện, bao gồm tên cơ sở dữ liệu, được cung cấp, tên cơ sở dữ liệu phải là tên của cơ sở dữ liệu hiện tại. Đối tượng phải có trong cơ sở dữ liệu hiện tại. Tên là nvarchar(776)
, không có mặc định.
Ngoài ra, tài liệu về Định danh phân cách (Cơ sở dữ liệu) nêu rõ:
Sử dụng định danh làm tham số trong SQL Server
Nhiều thủ tục, hàm và câu lệnh DBCC được lưu trữ hệ thống lấy tên đối tượng làm tham số. Một số tham số này chấp nhận tên đối tượng nhiều phần, trong khi các tham số khác chỉ chấp nhận tên một phần. Việc một tên một phần hay nhiều phần được mong đợi sẽ xác định cách một tham số được phân tích cú pháp và sử dụng bên trong bởi SQL Server.
Tên tham số một phần
Nếu tham số là định danh một phần, tên có thể được chỉ định theo các cách sau:
- Không có dấu ngoặc kép hoặc dấu phân cách
- Kèm theo dấu ngoặc đơn
- Kèm theo dấu ngoặc kép
- Kèm trong ngoặc
Tên tham số Multipart Tên
Multipart là tên đủ điều kiện bao gồm cơ sở dữ liệu hoặc tên lược đồ và cả tên đối tượng. Khi một tên nhiều phần được sử dụng làm tham số, SQL Server yêu cầu chuỗi hoàn chỉnh tạo nên tên nhiều phần được đặt trong một tập hợp các dấu ngoặc kép.
Đối số đầu tiên sp_helptext
chấp nhận cả hai tên đối tượng một phần (không đủ tiêu chuẩn) và nhiều phần (đủ điều kiện).
Nếu trình phân tích cú pháp T-SQL diễn giải mục sau sp_helptext
dưới dạng tên một phần (theo bốn dấu đầu dòng ở trên), tên kết quả được truyền dưới dạng giá trị đối số (kiểu chuỗi) mà thủ tục mong đợi.
Khi trình phân tích cú pháp xem nó như một tên nhiều phần , văn bản được yêu cầu được bao quanh với các dấu ngoặc kép như đã nêu.
Tính năng chính của tên nhiều phần là .
dấu phân cách (bên ngoài bất kỳ dấu phân cách nào).
Những ví dụ từ câu hỏi được diễn giải thành công dưới dạng tên một phần:
myproc - một phần (không có dấu ngoặc kép hoặc dấu phân cách - dấu đầu dòng 1)
[myproc] - một phần (trong ngoặc - dấu đầu số 4)
'myproc' - một phần (trong dấu ngoặc kép đơn - dấu đầu dòng # 2)
'dbo.myproc' - nhiều phần với các dấu ngoặc đơn được yêu cầu
[dbo.myproc] - một phần (trong ngoặc - dấu đầu số 4)
Cả hai ví dụ cuối cùng của câu hỏi đều được phân tích cú pháp dưới dạng tên tham số nhiều phần (do .
dấu phân cách tiếp xúc ). Chúng tạo ra lỗi vì chúng thiếu các dấu ngoặc kép kèm theo yêu cầu:
dbo.myproc - nhiều phần không có dấu ngoặc kép đơn yêu cầu
[dbo]. [myproc] - nhiều phần không có dấu ngoặc kép đơn yêu cầu
Ví dụ thêm này sử dụng dấu ngoặc kép là thành công:
"Dbo.myproc" - một phần (trong dấu ngoặc kép - dấu đầu dòng # 3)
Lưu ý rằng nó được diễn giải thành công (đối với giá trị tham số thủ tục) là tên một phần hợp lệ , nhưng mã thủ tục có thể diễn giải chuỗi (nhiều phần) mà nó nhận được một cách linh hoạt (sử dụng PARSENAME
và OBJECTID
).
Là một điểm quan tâm cuối cùng, lưu ý rằng việc sử dụng dấu ngoặc kép ở đây không phụ thuộc vào cài đặt của QUOTED_IDENTIFIER
.