2016-02-17 2 views
1

Je migre certaines tables et procédures stockées vers des tables optimisées en mémoire et des procédures stockées compilées en mode natif. Je suis coincé sur la comparaison de chaînes.Comment comparer les paramètres varchar dans une procédure stockée compilée de manière native?

Comparaison, le tri et la manipulation des chaînes de caractères qui ne sont pas utiliser un classement * de _BIN2 ne sont pas pris en charge avec compilés stockés de façon native procédures.

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 
+0

Pouvez-vous changer SecretKey d'utiliser un classement BIN2? –

Répondre

2

Modification de la collation du paramètre @SecretKey semble fonctionner pour moi, dans une copie de 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 
+0

Assurez-vous que cela n'interrompra pas les appelants qui attendent une autre collation – Demi