1

一部のテーブルとストアド プロシージャをインメモリ最適化テーブルとネイティブ コンパイル ストアド プロシージャに移行しています。文字列の比較で行き詰まっています。

*_BIN2 照合順序を使用しない文字列の比較、並べ替え、および操作は、ネイティブ コンパイル ストアド プロシージャではサポートされていません。

CREATE TABLE [User].[FingerPrints]
(
    Id int NOT NULL PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 10000),
    FingerPrint VARCHAR(4000) NOT NULL,
    SecretKey VARCHAR(512) NOT NULL,
    BranchId int NOT NULL,
    SteadySign bit NOT NULL,
    CreatedOn datetime NOT NULL,
    ModifiedOn datetime NOT NULL
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA)
GO

CREATE PROCEDURE [User].[GetFingerPrint]
    @Id int,
    @SecretKey VARCHAR(512)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS BEGIN ATOMIC WITH
(
 TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'
)

SELECT [Id]
      ,[FingerPrint]
      ,[SecretKey]
      ,[BranchId]
      ,[SteadySign]
      ,[CreatedOn]
      ,[ModifiedOn]
  FROM [User].[FingerPrints]
  WHERE [Id] = @Id AND [SecretKey] = @SecretKey

END
GO
4

1 に答える 1

3

パラメータの照合順序を変更すると@SecretKey、AdventureWorks2014 のコピーで機能するように見えます。

CREATE PROCEDURE [User].[GetFingerPrint]
    @Id int,
    @SecretKey VARCHAR(512) 
    WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS BEGIN ATOMIC WITH
(
 TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english'
)

SELECT [Id]
      ,[FingerPrint]
      ,[SecretKey]
      ,[BranchId]
      ,[SteadySign]
      ,[CreatedOn]
      ,[ModifiedOn]
  FROM [User].[FingerPrints]
  WHERE [Id] = @Id AND [SecretKey] = @SecretKey COLLATE LATIN1_GENERAL_BIN2

END
GO
于 2016-02-17T18:40:16.493 に答える