sql - NVARCHAR 变量在Where 子句中不起作用

标签 sql sql-server declare nvarchar

在 SQL Server(我想是 2018?我不知道如何判断)中,我的变量在 NVARCHAR 的 WHERE 子句中不起作用。 比较应该返回值,但它什么也不返回。如果我只是手动输入声明的文本,它会突然起作用并返回值。没有逻辑上的理由这应该有任何不同,类型都是 NVARCHARS。它对我来说适用于日期和数字。

以下 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 作为输出:

enter image description here


因此,将 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/

相关文章:

sql-server - Sql Server 精度疯狂

sql - 计算 "complex"t-SQL 语句中更新的记录数

c - 可以在循环的括号内定义循环变量吗?

MySQL 错误 1415

sql - PostgreSQL CHECK 约束外键以外的列

mysql - 使一些 SQL 行不可见/禁用以改进 SQL 搜索(对于大型数据库)

php - SQL从具有相同列名的2个表中选择仅在不为空时返回列

sql - 如何使用SQL条件语句

MySql 存储过程 -> 游标或处理程序声明后的变量或条件声明

SQL Where 子句 'that begins with' ?