【问题标题】:SQL Server - Pass Table as Parameter to function within selectSQL Server - 将表作为参数传递以在选择中运行
【发布时间】:2013-12-13 20:26:16
【问题描述】:

已将 TableType 设置为

create type KeyPairTable as Table (KeyValue nvarchar(50), 
                                   [Description] nvarchar(500))

我有一张可以简化为的表格

create table Elements (SharedKey int,
                       ElementName nvarchar(50), 
                       SourceSQL nvarchar(500))

我有一个带标题的函数

create function RunElement(@SharedKey int,
                           @ValuesTable KeyPairTable readonly)

现在我需要做的是有效地:

select RunElement(SharedKey, 
                  case when SourceSql is not null then [X] 
                       else [Y] 
                  end) from Elements

其中 [X] 获取存储在 SourceSQL 中的 SQL 语句并将其作为 KeyPairTable 传入,而 [Y] 是一个空表(例如,它不会被使用/不需要)

我想避免游标/循环并在选择中执行此操作,因为这是对问题的简化,并且选择实际上连接了多个表。

【问题讨论】:

  • 这里有些可疑,也许只是命名,但是您的 KeyPairTable (我希望它有一个键和一个值)似乎只有一个值而没有键 - 或者 KeyValue 实际上意思是钥匙?
  • KeyValue 是 'Key' 而 Description 是 'Value'... 但是 'Key' 和 'Value' 作为 sql 中的保留字,因此我自己的自定义列名,顺便说一句,这是一个简化的示例,我要问的是如何让一个“表”传递给一个选择中的函数

标签: sql-server sql-server-2012 sql-server-2012-express


【解决方案1】:

我要问的是如何让一个“表”传递给一个函数 一个选择

好的,您的示例代码的某些部分对我来说仍然没有意义,但我相信这个示例应该是您正在寻找的(或者足够接近您会理解的。)

DECLARE @myTable KeyPairTable 

INSERT INTO @myTable (KeyValue, [Description])
  SELECT SharedKey, 
         CASE WHEN SourceSql IS NULL THEN [X] ELSE [Y] END
  FROM Elements

SELECT RunElement(SharedKey, @myTable)

【讨论】:

    猜你喜欢
    • 2010-12-09
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    相关资源
    最近更新 更多