Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tôi cần một sp để chọn hoặc cập nhật các bảng của mình và vì điều đó tôi phải nhập nhiều giá trị cho một biến duy nhất, làm thế nào tôi có thể làm điều đó?

Bạn đã nghĩ đến việc sử dụng các biến bảng để truyền dữ liệu vào một thủ tục được lưu trữ chưa. Ví dụ:

Thiết lập

CREATE TYPE EmpIdValuesType AS TABLE
  (                     
        [EmpID] [int]NOT NULL
  )

CREATE TABLE Employee
(
  EmpID INT,
  Name varchar(20)
 )

INSERT INTO Employee 
Values
 (1, 'test1'),
 (2, 'test2'),
 (3, 'test3'),
 (4, 'test4'),
 (5, 'test5'),
 (6, 'test6'),
 (7, 'test7');

Create Procedure usp_GetEmployees
(
  @TableVariable EmpIdValuesType READONLY
)
AS
  SELECT *
  FROM Employee
  INNER JOIN @TableVAriable TV
    ON Employee.EmpId = TV.EmpId

Bây giờ bạn có thể chèn các hàng vào một biến bảng tạm thời kiểu EmpIdValuesType và chuyển biến vào thủ tục được lưu trữ:

Gọi thủ tục đã lưu trữ

DECLARE @empIds AS EmpIdValuesType

INSERT INTO @empIds(EmpID) Values (1), (2), (5)

Exec usp_GetEmployees @empIds;

Và đây là kết quả:

SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt để cắt tất cả các ký tự khoảng trắng khỏi một chuỗi trong T-SQL mà không có UDF và không có CLR là gì?

  2. SQL Server 2008 - Thêm vào chuỗi ở vị trí cụ thể trong cột tên

  3. WHERE IN (SELECT NonExistingColumnName) gây ra hành vi không mong muốn

  4. Cập nhật cấu hình thư cơ sở dữ liệu trong SQL Server (T-SQL)

  5. Triển khai quan hệ một-không-một trong SQL Server