2010-06-12 36 views
9

Tôi có SP nàyTại sao tôi không thể vượt qua trong một uniqueidentifier/GUID để một stored procedure

USE [TestDB] 
GO 
/****** Object: StoredProcedure [dbo].[sp_test] Script Date: 06/12/2010 11:47:27 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[sp_test] 
    @id uniqueidentifier 
AS 
BEGIN 

    select * from TestTbl where ProductId= @id 

END 

sau đó tôi đã đi đến SP với ms sql 2005 và nhấp thực thi. Nó đi kèm với một hộp mà tôi nhập vào GUID. Tôi đã sao chép và dán nó trực tiếp từ cơ sở dữ liệu thử nghiệm của mình.

Tôi gặp phải lỗi này.

Msg 102, Level 15, State 1, Line 5 Cú pháp không đúng gần 'cac671b'.

Vậy tại sao tôi không thể gửi trong GUID? ngay cả những cái được sao chép ngay từ cơ sở dữ liệu và phải hợp lệ khi chúng được cho phép vào db.

+0

100% đồng ý với @marc_s trên tiền tố. Chỉ cần không. Hoàn toàn không có lợi ích khi sử dụng sp_ hoặc usp_ hoặc bất kỳ điều gì trước ALL procs. Cũng giống như không có lợi ích gì khi đặt tên tabls 'tblMyTable' hoặc bất kỳ thứ gì. – NotMe

Trả lời

15

Hai gợi ý:

  • trước hết, làm không gọi stored procedures bạn sp_(something) - Microsoft đặc biệt warns against that

Chúng tôi khuyên bạn không tạo bất kỳ thủ tục lưu trữ sử dụng sp_ là tiền tố . Máy chủ SQL sử dụng tiền tố sp_ để chỉ định các quy trình được lưu trữ của hệ thống. Tên bạn chọn có thể xung đột với một số thủ tục hệ thống trong tương lai.

  • thứ hai: Tôi không có rắc rối gọi proc lưu trữ của bạn như thế này:

    EXEC proc_test 'B551F2C8-8380-491B-A51F-436E51CDD08F' 
    

như thế nào bạn gọi proc lưu trữ của bạn ?? Cho chúng tôi thấy!

-2

Tôi tưởng tượng bạn đang sao chép và dán một chuỗi. Bạn có thể khai báo và sử dụng nó như thế này không?

CREATE PROCEDURE [dbo].[sp_test] 
    @guidstr varchar(37) 
AS 

DECLARE @guid uniqueidentifier 
SET @guid = CONVERT(uniqueidentifier, @guidstr) 
... 
+0

Nó không phải là quá xấu của một ý tưởng. Đó là dọc theo dòng của những gì tôi đã được xem xét trước khi tôi bắt đầu tìm kiếm cách tôi sẽ xử lý guids và đi qua bài đăng này. Tôi nghĩ rằng giải pháp này sẽ chỉ di chuyển vấn đề của OP cho cuộc gọi hàm CONVERT. – froggythefrog

5

Thông điệp

cú pháp sai gần 'cac671b'.

Phải có nghĩa là nó đang cố phân tích cú pháp GUID. Hãy thử phân định nó trong dấu nháy đơn.

Các vấn đề liên quan