2016-03-22 22 views
7

Tôi đang sử dụng tham số có giá trị bảng trong một quy trình được lưu trữ của chúng tôi. Đây là cú pháp tôi đã sử dụng:Vượt qua giá trị mặc định thành Bảng Tham số có giá trị - SQL Server

@districtlist NumericList readonly 

(NumericList là loại bảng do người dùng xác định).

Tuy nhiên, theo yêu cầu, tôi cần chuyển giá trị mặc định cho tham số có giá trị của bảng này.

@districtlist NumericList = 0 readonly 

Nhưng mã trên ném lỗi cú pháp. Có thể truyền giá trị mặc định cho tham số có giá trị của bảng không? Ai đó có thể giúp tôi về điều này?

+2

Vì đây là bảng **, thực sự, bạn có thể xác định một thể hiện bảng * với các giá trị mặc định được thêm vào nó, hoặc bạn có thể sử dụng '@districtlist NumericList = NULL' làm tham số của mình (truyền' NULL giá trị 'là" mặc định "). –

+0

@districtlist NumericList = NULL không hoạt động đối với tôi. nó ném "Operand loại xung đột: NULL không tương thích với NumericList" lỗi – bmsqldev

Trả lời

8

Bạn có thể chọn không chuyển tham số, ngay cả khi không có mặc định được xác định cho nó. Ví dụ:

CREATE TYPE TestTable AS TABLE (my_id INT) 
GO 

CREATE PROCEDURE dbo.Test_TVP 
    @my_table TestTable READONLY, 
    @my_int INT 
AS 
BEGIN 
    SELECT * FROM @my_table 
END 
GO 

EXEC dbo.Test_TVP @my_int = 2 
GO 

DROP PROCEDURE dbo.Test_TVP 
DROP TYPE TestTable 

Trong trường hợp này, bảng sẽ đơn giản là trống. Nếu bạn muốn một số hàng mặc định thì bạn sẽ phải mô phỏng rằng trong thủ tục được lưu trữ, có thể bằng cách sử dụng một bảng tạm thời vì các tham số có giá trị bảng phải là READONLY.

+0

cảm ơn. Tôi sẽ vượt qua bảng @districtlist là null – bmsqldev

+0

Nếu bạn cố gắng chuyển nó thành 'NULL' thì nó sẽ thất bại. Ví dụ, '@_t_table = NULL' sẽ cho bạn một lỗi rằng' NULL' không tương thích với kiểu dữ liệu bảng của bạn. –

+0

những gì tôi có nghĩa là, trong C# code tôi chỉ cần sử dụng null hoặc 0 trong danh sách chèn và vượt qua danh sách vào mã sql. – bmsqldev

1

Bạn có thể vượt qua TVP như mặc định:

EXEC dbo.Test_TVP @my_table = default 

Đó là tương đương với một bảng trống.

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