Làm cách nào để thực thi thủ tục lưu trữ máy chủ SQL trong SQL Developer?


148

Tôi đã được cấp tài khoản người dùng cho cơ sở dữ liệu SQL Server chỉ có đặc quyền để thực hiện thủ tục được lưu trữ. Tôi đã thêm tệp jar JDBC JTDS SQL Server vào SQL Developer và thêm nó dưới dạng trình điều khiển JDBC của bên thứ ba. Tôi có thể đăng nhập thành công vào cơ sở dữ liệu SQL Server. Tôi đã được cung cấp cú pháp này để chạy thủ tục:

EXEC proc_name 'paramValue1' 'paramValue2'

Khi tôi chạy nó dưới dạng câu lệnh hoặc tập lệnh, tôi gặp lỗi này:

Error starting at line 1 in command:
EXEC proc_name 'paramValue1' 'paramValue2'
Error report:
Incorrect syntax near the keyword 'BEGIN'.

Tôi đã thử gói câu lệnh vào BEGIN/END, nhưng nhận được cùng một lỗi. Có thể gọi thủ tục từ SQL Developer không? Nếu vậy, tôi cần sử dụng cú pháp nào?

Câu trả lời:


231

Bạn không cần mệnh đề EXEC. Đơn giản chỉ cần sử dụng

proc_name paramValue1, paramValue2

(và bạn cần dấu phẩy như Misnomer đã đề cập)


8
Có bất kỳ ngoại lệ cho quy tắc này? Tôi dường như nhận được lỗi "Cú pháp không chính xác gần 'sp_dev_mystoredproc'." khi thực hiện với cú pháp này.
nuzzolilo

2
Yêu cầu phải có Proc_name trước trong trường hợp của tôi
César León

3
Tôi thực sự khuyên bạn nên truy cập vào liên kết được đề xuất bởi @MuriloKunze. Rất quan trọng để biết.
RBT

@RBT ai liên kết ở đâu?
Cổ tử cung

72

Bạn đang mất tích ,

EXEC proc_name 'paramValue1','paramValue2'

1
Tôi đã thêm dấu phẩy bị thiếu, nhưng một lần nữa, vẫn nhận được lỗi tương tự.
sdoca

Các tham số của bạn là gì nếu chúng là varchar thì chỉ cần bạn cần dấu ngoặc kép ... ngoài điều đó không thể nghĩ ra bất cứ điều gì ... bạn có thể thử điều này chỉ chạy cái này trong một cửa sổ mới - EXEC proc_namevà xem nó có hỏi bạn không tham số thứ hai ... sau đó ít nhất bạn biết sytax của bạn là đúng..nếu không hoạt động có nghĩa là bạn probanly không có tên Proc được lưu trữ đúng ... hãy thử tên đầy đủ đủ điều kiện ..
Vishal

Tôi đã xóa tham số thứ hai và vẫn còn lỗi. Tôi không nghĩ đó là quy trình chạy. Lệnh EXEC không được tô sáng cú pháp, vì vậy tôi đoán Nhà phát triển không nhận ra nó ngay cả khi kết nối đến cơ sở dữ liệu SQL Server. Nhưng tôi không thể tìm thấy bất cứ điều gì trên web để xác nhận / từ chối điều đó.
sdoca

Yea..try chọn một số hồ sơ và thực hiện một số lệnh đơn giản xem nếu bất cứ điều gì ở tất cả các công trình .. tốt nhất của may mắn ..!
Vishal

Thật không may, người dùng của tôi chỉ có đặc quyền để chạy thủ tục được lưu trữ.
sdoca

18

Bạn cần phải làm điều này:

    exec procName 
    @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

4
    EXECUTE [or EXEC] procedure_name
  @parameter_1_Name = 'parameter_1_Value', 
    @parameter_2_name = 'parameter_2_value',
    @parameter_z_name = 'parameter_z_value'

0
EXEC proc_name @paramValue1 = 0, @paramValue2 = 'some text';
GO

Nếu mục tiêu Thủ tục được lưu trữ là thực hiện INSERTtrên bảng có trường Danh tính được khai báo, thì trường, trong trường hợp này @paramValue1, phải được khai báo và chỉ cần chuyển giá trị 0, vì nó sẽ tự động tăng.


0

Tôi biết đây là cái cũ. Nhưng điều này có thể giúp đỡ người khác.

Tôi đã thêm chức năng gọi SP giữa BEGIN / END. Đây là một kịch bản làm việc.

ALTER Proc [dbo].[DepartmentAddOrEdit]
@Id int,
@Code varchar(100),
@Name varchar(100),
@IsActive bit ,
@LocationId int,
@CreatedBy int,
@UpdatedBy int
AS
    IF(@Id = 0)

    BEGIN
    INSERT INTO Department (Code,Name,IsActive,LocationId,CreatedBy,UpdatedBy,CreatedAt)
        VALUES(@Code,@Name,@IsActive,@LocationId,@CreatedBy,@UpdatedBy,CURRENT_TIMESTAMP)

    EXEC dbo.LogAdd @CreatedBy,'DEPARTMENT',@Name
    END

    ELSE

    UPDATE Department SET
        Code = @Code,
        Name = @Name,
        IsActive = @IsActive,
        LocationId = @LocationId,
        CreatedBy = @CreatedBy,
        UpdatedBy = @UpdatedBy,
        UpdatedAt =  CURRENT_TIMESTAMP 
    where Id = @Id 

-3

Nếu bạn chỉ cần thực hiện thủ tục lưu trữ của mình proc_name 'paramValue1' , 'paramValue2'... cùng lúc bạn đang thực hiện nhiều truy vấn như một truy vấn chọn và thủ tục được lưu trữ, bạn phải thêm select * from tableName EXEC proc_name paramValue1 , paramValue2...


-8

Các thủ tục được lưu trữ có thể được chạy trong công cụ nhà phát triển sql bằng cú pháp dưới đây

BEGIN tên thủ tục (); KẾT THÚC;

Nếu có bất kỳ tham số nào thì nó phải được thông qua.


Tại sao bạn kèm theo một câu lệnh bằng một khối câu lệnh? Bạn phải làm điều đó cho một loạt các câu lệnh T-SQL .
David Ferenczy Rogožan 10/11/2015

-11
Select * from Table name ..i.e(are you save table name in sql(TEST) k.

Select * from TEST then you will execute your project.

1
Chào mừng đến với stackoverflow. Thực hiện chuyến tham quan này để biết trang web này hoạt động như thế nào và nó dùng để làm gì. Câu trả lời của bạn là gì?
Devraj Gadhavi 17/12/13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.