在 SQL Server(我想是 2018?我不知道如何判断)中,我的变量在 NVARCHAR 的
比较应该返回值,但它什么也不返回。如果我只是手动输入声明的文本,它会突然起作用并返回值。没有逻辑上的理由这应该有任何不同,类型都是 NVARCHARS。它对我来说适用于日期和数字。WHERE
子句中不起作用。
以下 SQL Server 代码可以正常工作并返回结果:
SELECT * FROM table WHERE Column = 'text'
但是,当我使用初始声明语句时,以下代码会失败,因为显示为空:
DECLARE @Class AS NVARCHAR = 'text'
SELECT * FROM table WHERE Column = @Class
即使我已确认该列是 NVARCHAR
,我仍无法使该变量在 WHERE
子句中工作。我声明的其他参数工作正常,但似乎 NVARCHAR
给我带来了问题。
我有什么遗漏吗?
最佳答案
这并不像你想象的那样:
DECLARE @Class AS NVARCHAR = 'text';
- 您必须使用
varchar(n)
、nvarchar(n)
指定长度参数n
,并且varbinary(n)
列类型,因为如果不这样做,它相当于n = 1
。 - 因此
DECLARE @Class AS NVARCHAR = 'text'
与以下内容相同:声明 @Class AS nvarchar(1) = 'text'
- 这意味着
@class = N't'
而不是N'text'
(但如果您将DECLARE @Class AS nvarchar(4 )
。
您可以通过运行以下命令来查看它:
DECLARE @Class AS NVARCHAR = 'text'
SELECT @class;
...它为您提供 t
作为输出:
因此,将 SQL 更改为:
DECLARE @class nvarchar(4) = N'text';
SELECT * FROM table WHERE Column = @class;
此外,不要忘记始终对您的对象名称进行模式限定:即更喜欢 dbo.table
而不是 table
。
关于sql - NVARCHAR 变量在Where 子句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74484372/