0

SQL Server に、テキスト エントリ(varchar(max))に基づいてID (int)を返すスカラー値関数があります。この関数は、特定のシリアル番号の製品 SKU ID を返すために使用されます。

これがSQL関数です。

CREATE function [dbo].[fGetPSKU]
(
  @SerialNumber varchar(MAX)
)
returns int
begin

  /*
    local variables  
  */
  declare cmodel cursor local for
    select PSKU.ProductSKUID, PSKU.ProductSKUValadationStart, PSKU.ProductSKUValadationEnd, PSKU.ProductSKUValadationMask, PSKU.PruductSKUValadationLength
      from SCM.dbo.ProductSKU PSKU
      where PSKU.ProductSKUActive = 0
        and PSKU.ProductSKURequiresValadation = 1
      order by PSKU.ProductSKUValadationEnd - PSKU.ProductSKUValadationStart desc, len(PSKU.ProductSKUValadationMask) desc, PSKU.ProductSKUDateCreated desc, PSKU.ProductSKUID desc
  declare @mid int
  declare @mstart int
  declare @mend int
  declare @masks varchar(max)
  declare @lengths varchar(255)
  declare @found int
  declare @model int

  /* 
    main code 
  */
  set @found = 0
  set @model = -1

  open cmodel

  fetch next from cmodel into @mid, @mstart, @mend, @masks, @lengths

  while @@fetch_status = 0 and @found = 0
  begin

    if exists
      (
        select null
          from SCM..fParseDelimited(@masks, ',')
          where ids = substring(@SerialNumber, @mstart, @mend - @mstart + 1)
      )
      and exists
      (
        select null
          from SCM..fParseDelimited(@lengths, ',')
          where ids = convert(varchar, len(@SerialNumber))
      )
    begin
      set @found = 1
      set @model = @mid

    end

    fetch next from cmodel into @mid, @mstart, @mend, @masks, @lengths

  end

  close cmodel

  return @model

end

Entity Framework にインポートすると、次のエラーが表示されます。この同様の投稿を読み ましたが、関数を正常に実行するために EF のどこに何を作成すればよいかについてはあまり明確ではありません。

アドバイス/ヘルプをいただければ幸いです。

4

1 に答える 1

2

Function インポートを EDMX の SSDL 部分に追加する必要があります。XML エディターで EDMX を開くと、EDMX が 3 つの部分で構成されていることがわかります。

  • SSDL
  • CSDL
  • CS マッピング

SSDL はedm:StorageModelsノード内にあります。そこに関数のインポートを追加する必要があります。Visual Studio で EDMX ファイルを XML として開くと、Function ノードを追加できることを示す IntelliSense が表示されます。

于 2013-03-28T13:01:02.050 に答える