我正在将一些表和存储过程迁移到内存中优化的表和本机编译的存储过程,并且陷入空值比较。
这是我的代码:
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.
如何在参数上指定排序规则,或者是否有其他方法可以使此空值比较起作用?
答案 0 :(得分:0)
请参阅上面@Eric J的评论。
您可以在任何可以指定字段的地方添加“Collate {Collation Value}”。您是否尝试过“IF @MyData Collate {Collation} IS NOT NULL”?
我只是把它作为答案来帮助人们找到它。