【问题标题】:Structure types in T-SQLT-SQL 中的结构类型
【发布时间】:2015-08-21 21:23:25
【问题描述】:

据我所知,SQL Server 不支持包含其他类型的结构类型, 例如你不能做这样的事情

create type User as(UserId int, Name varchar(10), Address varchar(255))

然后使用它:

declare @user User
set @user.UserId = 10
...

也许有人知道任何有助于模拟这种行为的库/框架,例如,它可以是一些使用 XML 数据类型保存并检索值的函数集。

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

【问题讨论】:

  • 我不知道在 sql server 中创建结构化类型的任何其他选项...也许其他人会有更适合您需求的答案。
  • 我对这些事情使用 XML 参数。
  • @RogerWolf:太好了!我想知道为什么我自己没有考虑过... [palmface]

标签: sql-server tsql sqldatatypes


【解决方案1】:

早安,

我的第一个猜测是您需要用户定义的表类型,正如其他提到的那样。但无论如何你都错了,你可以创建包含其他类型的新类型。例如,我使用使用 SQLCLR 创建的“复数”类型。

你可以在这里看到一个简单的代码: http://www.codeproject.com/Articles/15651/Creating-User-Defined-Data-Types-in-SQL-Server

这不是我使用的代码 :-) 我现在才在 Google 上找到它。

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

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

我希望这有用:-)

【讨论】:

  • 您能否详细说明在从 c# 代码执行存储过程时如何使用这些类型? (使用 ado.net 或 ORM)
  • 嗨罗南。请忽略我的问题,我已经找到了相关的 MSDN 页面。
  • 再见 Zohar Peled,由于您的新类型没有与其他 ORM 映射,例如实体框架,因此需要更多的工作直接使用它,但理论上这是干净的方式(使用覆盖现有元素例如在课堂上)因此简单的解决方案是...... *我会写另一条评论,因为网站删掉了......这不是一个好的教程界面:-)仅用于短消息
  • 再见 Zohar,任何类型的使用都取决于您声明和配置类型的方式。为了简化讨论,让我们谈谈另一种常见的类型:点。您可以在此处查看代码:msdn.microsoft.com/en-us/library/a8s4s5dz(v=vs.90).aspx 选项 1:您可以使用来自任何客户端的简单查询,例如使用 INSERT INTO test_table (column1) VALUES ('1:2') 选项 2(我建议在大多数情况下使用这种方法):使用简单的 SP。您可以将一个表值参数传递给 SP,也可以只传递几个参数,以满足您的需要。
  • 谢谢,这总是一种乐趣(即使是英文 :-))
猜你喜欢
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
相关资源
最近更新 更多