Sql server 是否有Transact-SQL的替代品

Sql server 是否有Transact-SQL的替代品,sql-server,tsql,Sql Server,Tsql,多年来,我第一次在SQL Server 2008中进行了一些T-SQL编程,却忘记了该语言到底有多糟糕: 流控制(所有开始/结束的东西)感觉笨重 异常处理很差。例外不会像其他语言一样冒泡。除非您自己编写代码,而且raiserror函数的拼写都不正确(这让我有些头疼!) 字符串处理能力差 唯一的序列类型是表。我必须编写一个函数,根据分隔符拆分字符串,并将其存储在一个表中,该表包含字符串部分以及一个值,该值指示序列中的位置 如果需要在存储的进程中进行doa查找,那么操纵结果是痛苦的。如果结果包含某

多年来,我第一次在SQL Server 2008中进行了一些T-SQL编程,却忘记了该语言到底有多糟糕:

  • 流控制(所有开始/结束的东西)感觉笨重
  • 异常处理很差。例外不会像其他语言一样冒泡。除非您自己编写代码,而且raiserror函数的拼写都不正确(这让我有些头疼!)
  • 字符串处理能力差
  • 唯一的序列类型是表。我必须编写一个函数,根据分隔符拆分字符串,并将其存储在一个表中,该表包含字符串部分以及一个值,该值指示序列中的位置
  • 如果需要在存储的进程中进行doa查找,那么操纵结果是痛苦的。如果结果包含某种排序列,则必须使用游标或将while循环与嵌套查找组合在一起
我意识到我可以使用C#编写存储过程,但这需要允许服务器允许CLR功能,这在我的工作场所是不允许的

是否有人知道在SQLServer中是否有T-SQL的替代方案,或者是否有任何引入T-SQL的计划。肯定有更现代的选择


PS:这并不是为了挑起一场火焰战,我真正感兴趣的是选项是什么;它完成了预期的工作(除了添加控制流结构,但我离题了!)


也许看看吧?您可以编写,但我不建议这样做,除非是因为缺少某些功能(或繁重的字符串处理)。

在我看来,SQL Server中t-SQL的唯一替代方法是不使用SQL Server

根据你的点处理刺带分隔符, 这些弦是从哪里来的? 您可以尝试使用集成服务和“ssis包”将数据从一个转换为另一个。
还有一种通过链接服务访问非SQL数据的好方法,

所有其他数据库存储过程语言(PL/SQL、SQL/PSM)都有同样的问题。就我个人而言,我认为这些语言完全适合它们的用途——它们最适合用于代码数据驱动逻辑,尤其是在您希望将其用于多个应用程序的情况下


所以我想我的反问题是,为什么希望程序作为数据库服务器进程的一部分运行?您想做得更好的不是在应用程序或中间件级别解决了吗?在那里,您可以选择任何语言或数据处理工具

也许这对序列有点帮助:@Skurmedel:谢谢。我遇到过类似的文章,它们可能会强调指出,一旦你使用tsql,你就必须把所有东西都放到表中,以便处理一个“列表”@Mitch:仅仅因为它能完成任务,严格来说并不意味着它没有错。你必须与语言搏斗才能完成简单的事情,那么它会向我暗示,它不是最好的语言。SQL Server是一种企业级数据库,它应该有一种企业级语言,而不是拼凑在一起的东西。@Sean:T-SQL是一种基于集合的SQL编程语言,它做得非常好。T-SQL不是一种过程语言——它处理这些结构的能力不是很好,但这不是它最初的目的。我同意Mitch和Marc的观点。TSQL在基于集合的操作方面非常出色。一旦你知道如何正确使用它,它将是一个非常强大的工具。也许如果Sean在过程中有太多的控制流,那么在数据库层中就有太多的业务逻辑……摆脱流控制,就可以解决所有问题。是的,一些处理将在中间件级别完成,但在存储过程中仍有相当多的工作要做。另外,在微软的世界里,中间件级别在哪里?没有像WebLogic或JBoss这样的真正的“应用服务器”概念,相反,您有SQL server、MSMQ和IIS的组合。Sean,我倾向于调用任何没有立即连接到前端或后端中间件的东西。您再次确认将在存储过程中执行此操作,但我认为您仍然需要回答自己:“为什么?-如果在外部组件中执行此操作,您会损失什么?”PL/SQL比T-SQL优越得多,它具有实际工作的错误处理功能,并且有包。我正在寻找跨语言支持。通过编码T-SQL中的一些功能,我计划从C++、java、python和C++中有一个薄的库。通过将更多的功能提升到一个级别,if会带来更多的语言互操作问题,而调用存储过程则很容易从任何语言中获得。@SQL Cowboy:看,您不必向我解释PL/SQL有哪些功能和没有哪些功能。我很清楚他们。实际编程PL/SQL和T-SQL过程之间的相似性大于差异@肖恩,这是一个正确的观点,我不会争辩。我不是一个.NET开发者,但既然你似乎已经绑定到了MS平台,那么这个(.NET)不是解决了大多数问题吗?