jra*_*ara 119 sql t-sql sql-server types
什么是SQL Server SYSNAME数据类型?BOL说:
sysname数据类型用于存储对象名称的表列,变量和存储过程参数.
但我真的不明白.是否有可以提供的用例?
cod*_*ger 132
sysname是一种内置数据类型,限制为128个Unicode字符,IIRC主要用于在创建脚本时存储对象名称.它的价值不可能NULL
它与使用基本相同 nvarchar(128) NOT NULL
编辑
正如@Jim在评论中提到的那样,我认为没有真正的商业案例sysname可以说实话.它主要由Microsoft sys在SQL Server中构建内部表和存储过程等时使用.
例如,通过执行,Exec sp_help 'sys.tables'您将看到列name被定义为sysname这是因为它的值实际上是一个对象本身(一个表)
我会担心太多.
同样值得注意的是,对于那些仍在使用SQL Server 6.5及更低版本的用户(仍有人使用它吗?)内置类型sysname相当于varchar(30)
文档
sysname定义与文档nchar,并nvarchar在备注部分:
sysname 是系统提供的用户定义数据类型,在功能上等同于nvarchar(128),但它不可为空.sysname用于引用数据库对象名称.
为了澄清上述说明,默认情况下 定义sysname,因为NOT NULL它当然可以将其定义为可空.同样重要的是要注意,确切的定义可能因SQL Server实例而异.
的数据类型为sysname数据类型用于表的列,变量和存储存储对象名称过程参数.sysname的确切定义 与标识符规则有关.因此,它可以在SQL Server的实例之间变化.sysname在功能上与nvarchar(128)相同,但默认情况下sysname为NOT NULL.在早期版本的SQL Server中,sysname被定义为varchar(30).
就像一个仅供参考....
select * from sys.types where system_type_id = 231 给你两行。
(我还不确定这意味着什么,但我 100% 确定它现在弄乱了我的代码)
编辑:我想这意味着你应该在这种情况下(我的情况)加入 user_type_id 或者 user_type_id 和 system_type_id
name system_type_id user_type_id schema_id principal_id max_length precision scale collation_name is_nullable is_user_defined is_assembly_type default_object_id rule_object_id
nvarchar 231 231 4 NULL 8000 0 0 SQL_Latin1_General_CP1_CI_AS 1 0 0 0 0
sysname 231 256 4 NULL 256 0 0 SQL_Latin1_General_CP1_CI_AS 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
create procedure dbo.yyy_test (
@col_one nvarchar(max),
@col_two nvarchar(max) = 'default',
@col_three nvarchar(1),
@col_four nvarchar(1) = 'default',
@col_five nvarchar(128),
@col_six nvarchar(128) = 'default',
@col_seven sysname
)
as begin
select 1
end
Run Code Online (Sandbox Code Playgroud)
这个查询:
select parm.name AS Parameter,
parm.max_length,
parm.parameter_id
from sys.procedures sp
join sys.parameters parm ON sp.object_id = parm.object_id
where sp.name = 'yyy_test'
order by parm.parameter_id
Run Code Online (Sandbox Code Playgroud)
产量:
parameter max_length parameter_id
@col_one -1 1
@col_two -1 2
@col_three 2 3
@col_four 2 4
@col_five 256 5
@col_six 256 6
@col_seven 256 7
Run Code Online (Sandbox Code Playgroud)
和这个:
select parm.name as parameter,
parm.max_length,
parm.parameter_id,
typ.name as data_type,
typ.system_type_id,
typ.user_type_id,
typ.collation_name,
typ.is_nullable
from sys.procedures sp
join sys.parameters parm ON sp.object_id = parm.object_id
join sys.types typ ON parm.system_type_id = typ.system_type_id
where sp.name = 'yyy_test'
order by parm.parameter_id
Run Code Online (Sandbox Code Playgroud)
给你这个:
parameter max_length parameter_id data_type system_type_id user_type_id collation_name is_nullable
@col_one -1 1 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_one -1 1 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
@col_two -1 2 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_two -1 2 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
@col_three 2 3 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_three 2 3 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
@col_four 2 4 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_four 2 4 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
@col_five 256 5 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_five 256 5 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
@col_six 256 6 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_six 256 6 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
@col_seven 256 7 nvarchar 231 231 SQL_Latin1_General_CP1_CI_AS 1
@col_seven 256 7 sysname 231 256 SQL_Latin1_General_CP1_CI_AS 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120911 次 |
| 最近记录: |