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

Sử dụng giá trị mặc định của một cột trong các thủ tục được lưu trữ

Bạn đang không sử dụng mặc định theo cách nó được dự định. Đó là thứ mà SQL Server đánh giá nội bộ tại thời điểm chèn (hoặc có khả năng cập nhật nếu default từ khóa được sử dụng).

Nó không được thiết kế để sử dụng trong SELECT . Hãy xem xét rằng nó có thể chứa các biểu thức tùy ý như DEFAULT CAST(GETDATE() AS INT) % 2 hoặc gọi UDF vô hướng. Truyền từ chuỗi sang bit sẽ không đánh giá các biểu thức đó cho bạn.

Cách duy nhất bạn có thể làm như vậy là đánh giá nó một cách riêng biệt

DECLARE @B            BIT
        , @Definition NVARCHAR(max)

SELECT @Definition = N'SELECT @B = '
                     + object_definition(default_object_id)
FROM   sys.columns
WHERE  NAME = 'value'
       AND object_id = OBJECT_ID('dbo.t2')

EXEC sys.sp_executesql
  @Definition,
  N'@B BIT OUTPUT',
  @B = @B OUTPUT

SELECT t1.*,
       ISNULL(t2.value, @B)
FROM   t1
       LEFT JOIN t2
              ON t1.id = t2.id 


  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 dễ nhất để xác thực người dùng trong thủ tục được lưu trữ?

  2. SSIS xuất dữ liệu sang tệp phẳng hiển thị dấu ngoặc kép dưới dạng ký tự thập lục phân

  3. SQL Server:làm thế nào để truy vấn khi bản sao lưu nhật ký giao dịch cuối cùng đã được thực hiện?

  4. Chức năng như USE để trỏ đến cơ sở dữ liệu SQL trên một máy chủ khác?

  5. Khắc phục “Máy chủ SQL bị chặn truy cập vào STATEMENT‘ OpenRowset / OpenDatasource ’của thành phần‘ Truy vấn phân tán Ad Hoc ”