วิธีดำเนินการ SQL Server ที่เก็บไว้ใน SQL Developer


148

ฉันได้รับบัญชีผู้ใช้กับฐานข้อมูล SQL Server ที่มีสิทธิ์ดำเนินการตามขั้นตอนที่เก็บไว้เท่านั้น ฉันเพิ่มไฟล์ jar JDBC SQL Server JDBC ไปยัง SQL Developer และเพิ่มเป็นไดร์เวอร์ JDBC ของบุคคลที่สาม ฉันสามารถล็อกอินเข้าสู่ฐานข้อมูล SQL Server ได้สำเร็จ ฉันได้รับไวยากรณ์นี้สำหรับการเรียกใช้ขั้นตอน:

EXEC proc_name 'paramValue1' 'paramValue2'

เมื่อฉันเรียกใช้สิ่งนี้ทั้งคำสั่งหรือสคริปต์ฉันได้รับข้อผิดพลาดนี้:

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

ฉันลองใส่คำสั่งเข้าไปBEGIN/ENDแต่ได้รับข้อผิดพลาดเดียวกัน เป็นไปได้ไหมที่จะเรียกขั้นตอนจาก SQL Developer? ถ้าเป็นเช่นนั้นฉันต้องใช้ไวยากรณ์อะไร

คำตอบ:


231

คุณไม่จำเป็นต้องใช้ประโยค EXEC เพียงใช้

proc_name paramValue1, paramValue2

(และคุณต้องใช้จุลภาคตามที่ระบุไว้ใน Misnomer)


8
มีข้อยกเว้นสำหรับกฎนี้หรือไม่? ฉันดูเหมือนจะได้รับข้อผิดพลาด "ไวยากรณ์ไม่ถูกต้องใกล้กับ 'sp_dev_mystoredproc'" เมื่อรันด้วยไวยากรณ์นี้
nuzzolilo

2
EXEC proc_name ก่อนที่จะต้องในกรณีของฉัน
Césarเลออน

3
ฉันขอแนะนำอย่างยิ่งให้ไปที่ลิงก์ที่แนะนำโดย @MuriloKunze สำคัญมากที่ต้องรู้
RBT

@RBT ใครลิงค์อยู่ที่ไหน
CervEd

72

คุณหายไป ,

EXEC proc_name 'paramValue1','paramValue2'

1
ฉันเพิ่มเครื่องหมายจุลภาคที่หายไป แต่อีกครั้งยังคงได้รับข้อผิดพลาดเดียวกัน
sdoca

พารามิเตอร์ของคุณคืออะไรถ้าพวกเขาเป็น varchar เพียงคุณเท่านั้นที่ต้องมีคำพูด ... นอกเหนือจากที่ไม่สามารถคิดอะไร ... คุณสามารถลองใช้เพียงแค่นี้ในหน้าต่างใหม่ - EXEC proc_nameและดูว่ามันขอให้คุณ พารามิเตอร์ที่สอง ... แล้วอย่างน้อยคุณรู้ sytax ของคุณ right..if ทำงาน does not หมายความว่าคุณชื่อ proc probanly ไม่ต้องเก็บไว้ถูกต้อง ... ลองใช้ชื่อที่มีคุณสมบัติเต็มรูปแบบ ..
วิษณุ

ฉันลบพารามิเตอร์ที่สองและยังคงเป็นข้อผิดพลาดเดียวกัน ฉันไม่คิดว่ามันจะเป็นกระบวนการทำงานเลย คำสั่ง EXEC ไม่ใช่การเน้นไวยากรณ์ดังนั้นฉันเดาว่า Developer จะไม่รู้จักแม้ว่าการเชื่อมต่อจะเป็นฐานข้อมูล SQL Server แต่ฉันไม่พบสิ่งใดบนเว็บเพื่อยืนยัน / ปฏิเสธ
sdoca

ใช่ .. ลองเลือกบางระเบียนและใช้งานคำสั่งง่ายๆเพื่อดูว่ามีอะไรที่ได้ผล! .. โชคดีที่สุด ..
Vishal

น่าเสียดายที่ผู้ใช้ของฉันมีสิทธิ์ใช้งานขั้นตอนการจัดเก็บเท่านั้น
sdoca



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

ถ้าวัตถุประสงค์ของกระบวนงานที่เก็บไว้คือการดำเนินการINSERTบนตารางที่มีเขตข้อมูลผู้ใช้อีเมล@paramValue1ควรจะประกาศเขตข้อมูลในสถานการณ์นี้และเพียงแค่ส่งค่า 0 เพราะจะเป็นการเพิ่มอัตโนมัติ


0

ฉันรู้ว่านี่เป็นของเก่า แต่นี่อาจช่วยผู้อื่น

ฉันได้เพิ่มฟังก์ชั่นการโทร SP ระหว่าง BEGIN / END นี่คือสคริปต์ทำงาน

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

ถ้าคุณเพียงแค่ต้องการเก็บข้อมูลกระบวนงานproc_name 'paramValue1' , 'paramValue2'... ที่เก็บไว้ ในเวลาเดียวกันคุณกำลังดำเนินการแบบสอบถามมากกว่าหนึ่งแบบสอบถามเช่นแบบสอบถามแบบใช้เลือกข้อมูลหนึ่งและขั้นตอนการจัดเก็บที่คุณต้องเพิ่ม select * from tableName EXEC proc_name paramValue1 , paramValue2...


-8

ขั้นตอนการจัดเก็บสามารถเรียกใช้ในเครื่องมือนักพัฒนา sql โดยใช้ไวยากรณ์ด้านล่าง

BEGIN ขั้นตอนชื่อ (); END;

หากมีพารามิเตอร์ใด ๆ ก็จะต้องมีการส่งผ่าน


ทำไมคุณถึงล้อมรอบคำสั่งเดียวโดยบล็อกคำสั่ง? คุณต้องทำเพื่อชุดคำสั่ง T-SQLเท่านั้น
David Ferenczy Rogožan

-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
ยินดีต้อนรับสู่ stackoverflow เข้าร่วมทัวร์ครั้งนี้เพื่อรับทราบว่าเว็บไซต์นี้ทำงานอย่างไรและเหมาะกับการใช้งานอย่างไร คำตอบของคุณคืออะไร?
Devraj Gadhavi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.