2009-08-18 42 views
7

Tôi không hiểu tại sao sau đây lại cho tôi lỗi. Tôi nghĩ nó liên quan đến phần bình luận, nhưng @SQL là nvarchar (4000).Cú pháp không chính xác gần 'sp_executesql'

BEGIN 
    sp_executesql N'SELECT ''td''' 
    --sp_executesql @SQL, N'@StartDate DateTime, @EndDate DateTime, @End2 DateTime, @Program varchar(4)', @StartDate, @EndDate, @End2, @Program 
END 

Trả lời

13

Đây là lý do tại sao:

 
-- This works just fine: 
BEGIN 
    -- You must have an exec before your sp_executesql or it will not work in a block 
    exec sp_executesql N'SELECT ''td''' 
END 

Bạn có thể không chỉ cần gọi một proc lưu trữ mà không có một exec khi bạn đang ở trong một khối.

+1

Bạn có thể gọi một proc lưu trữ mà không cần và exec, nhưng chỉ khi cuộc gọi đến proc lưu trữ là báo cáo kết quả chỉ trong khối. –

+1

nó phải là tuyên bố đầu tiên, không nhất thiết phải là tuyên bố duy nhất. – Tao

2

Tại sao bạn có điều này kèm theo trong BEGIN ... END? Chạy khối sp_executesql bên ngoài sẽ hoạt động.

Tùy chọn bạn có thể đặt exec trước sp_executesql.

0

Trên một số dịp tôi đã phải sử dụng tổng thể cũng như:

exec master..sp_executesql 
Các vấn đề liên quan