如何在本机编译的存储过程中将varchar参数与null进行比较?

时间:2016-01-07 17:40:30

标签: sql sql-server stored-procedures

我正在将一些表和存储过程迁移到内存中优化的表和本机编译的存储过程,并且陷入空值比较。

这是我的代码:

CREATE TABLE [dbo].[MyInMemTable]
(
    [MyId] int NOT NULL IDENTITY(1,1),
    [MyData] varchar(900) COLLATE Latin1_General_100_BIN2 not null
    CONSTRAINT [PK_MyInMemTable] PRIMARY KEY NONCLUSTERED ([MyId])
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY=SCHEMA_ONLY)
GO

CREATE PROCEDURE [dbo].[sp_InsertIntoMyInMemTable](@MyData varchar(900))
    WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS 
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')
    IF @MyData IS NOT NULL  
    BEGIN
        INSERT INTO dbo.[MyInMemTable] (MyData) VALUES (@MyData)
        SELECT SCOPE_IDENTITY()
    END
    ELSE
        SELECT 0
END

我收到以下错误:

Msg 12327, Level 16, State 101, Procedure sp_InsertIntoMyInMemTable, Line 306
Comparison, sorting, and manipulation of character strings that do not use a *_BIN2 collation is not supported with natively compiled stored procedures.

如何在参数上指定排序规则,或者是否有其他方法可以使此空值比较起作用?

1 个答案:

答案 0 :(得分:0)

请参阅上面@Eric J的评论。

您可以在任何可以指定字段的地方添加“Collat​​e {Collat​​ion Value}”。您是否尝试过“IF @MyData Collat​​e {Collat​​ion} IS NOT NULL”?

我只是把它作为答案来帮助人们找到它。