Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Използвайте стойността по подразбиране на колона в съхранени процедури

Вие не използвате по подразбиране по начина, по който е предназначен. Това е нещо, което SQL Server оценява вътрешно по време на вмъкване (или потенциално актуализиране, ако default използва се ключова дума).

Не е предназначен за използване в SELECT . Помислете, че може да съдържа произволни изрази като DEFAULT CAST(GETDATE() AS INT) % 2 или извикване на Scalar UDF. Прехвърлянето от низ към бит няма да оцени тези изрази вместо вас.

Единственият начин да направите нещо подобно е да го оцените отделно

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. Изявление за актуализиране за множество идентификатори

  2. Как да включите и изключите IDENTITY_INSERT с помощта на SQL Server 2008?

  3. Можем ли да инсталираме Express edition и Standard edition на SQL Server на един и същ PC потребител?

  4. Разбиране на SQL Server винаги криптиран

  5. Изтриване на дублиращи се записи от SQL таблица без първичен ключ