Sql server T-SQL中的结构类型

Sql server T-SQL中的结构类型,sql-server,tsql,sqldatatypes,Sql Server,Tsql,Sqldatatypes,我知道SQL Server不支持包含其他类型的结构类型, 例如,你不能做这样的东西 create type User as(UserId int, Name varchar(10), Address varchar(255)) 然后使用它: declare @user User set @user.UserId = 10 ... 也许有人知道任何有助于模拟这种行为的库/框架,例如,它可以是一组使用XML数据类型保存并检索其值的函数 我试图解决的问题是在存储过程之间传递大量参数。我有一个程序,

我知道SQL Server不支持包含其他类型的结构类型, 例如,你不能做这样的东西

create type User as(UserId int, Name varchar(10), Address varchar(255))
然后使用它:

declare @user User
set @user.UserId = 10
...
也许有人知道任何有助于模拟这种行为的库/框架,例如,它可以是一组使用XML数据类型保存并检索其值的函数

我试图解决的问题是在存储过程之间传递大量参数。我有一个程序,它接受了近30个参数,然后把这些参数逻辑和路径传递给另一个程序,然后第二个程序把一些逻辑和路径参数传递给第三个程序。然后,要求发生变化,应在所有程序中添加新参数。对于结构数据类型,它转换为仅在数据类型中添加新字段。另一个优点是可读性。

祝您愉快

我的第一个猜测是,您需要用户定义的表类型,正如前面提到的。但在任何情况下,您都是错误的,您可以创建包含其他类型的新类型。例如,我使用使用SQLCLR创建的“复数”类型

您可以在此处看到一个简单的代码:

这不是我使用的代码:-)我现在在谷歌上找到这个

为了澄清,“复数”是由两个简单的十进制数组成的,这意味着我们使用两种类型来创建用户定义的数据类型:-)

我也使用其他类型,例如另一个是bigint。我有一个非常大的表,需要比BIGINT大的整数。。。我创建了另一个类型BIGINT,它使用两个BIGINT类型


我希望这有用:-)

我不知道还有其他方法可以在sql server中创建结构化类型。。。也许其他人会有一个更适合你的答案。我用XML参数来做这些事情。@RogerWolf:太好了!我想知道为什么我自己没有想到。。。[palmface]您能否详细说明在从c#代码执行存储过程时如何使用这些类型?(使用ado.net或ORM)Hi Ronen。请忽略我的问题,我已经找到了相关的MSDN页面。祝你好运Zohar Peled,因为你的新类型没有映射到其他ORM,例如实体框架,它需要更多的工作直接使用它,但理论上这是干净的方式(例如使用覆盖类中的现有元素),因此简单的解决方案是…*我将写另一个评论,因为网站削减它。。。这不是一个很好的教程界面:-)仅针对短消息good day Zohar,任何类型的使用都取决于您声明和配置类型的方式。为了简化讨论,让我们讨论另一种常见类型:point。您可以在这里看到代码:选项1:您可以使用任何客户端的简单查询,如使用INSERT-INTO test_table(column1)VALUES('1:2')选项2(我建议在大多数情况下这样做):使用simple SP。您可以向SP传递一个表值参数,或仅传递几个参数,以满足您的需要。谢谢,这总是一种乐趣(即使在英语中:-)