SQL Server自定义非空数据类型并带默认值返回null。

5
我想知道为什么在SQL Server中创建一个基于非空整数的自定义数据类型,并将其分配给默认值时,如果它不是表定义(只是单个声明的变量),我无法获取此值。
以下是我的代码:
BEGIN TRAN;
GO
CREATE TYPE Province FROM INT NOT NULL;
GO
CREATE DEFAULT ProvinceDefault AS 4;
GO
EXEC sp_bindefault
'ProvinceDefault',
'Province';
GO
DECLARE @Province Province;
SELECT @Province;
GO
ROLLBACK TRAN;

它返回 NULL

2
这只是DEFAULT对象的本质,它仅适用于列。MSDN指出:“当绑定到列或别名数据类型时,默认值指定要插入到对象绑定的列(或在别名数据类型的情况下插入到所有列)中的值,在插入期间未明确提供值。”无法为变量指定默认值。值得注意的是,CREATE DEFAULT已被弃用,因此最好完全避免使用它。 - GarethD
1个回答

0

MSDN :-

[ @objname= ] 'object_name'

是要绑定默认值的表和列或别名数据类型的名称。object_name是nvarchar(776),没有默认值。不能使用varchar(max)、nvarchar(max)、varbinary(max)、xml或CLR用户定义类型来定义object_name。

链接:https://msdn.microsoft.com/zh-cn/library/ms177503.aspx


它虽然不是CLR用户定义类型,但这似乎与此无关。sp_bindefault对于OP运行良好,并且确切地执行了它应该执行的操作。问题在于将默认值应用于变量不是它所做的事情之一,也不是可以完成的事情。 - GarethD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接