2017-09-03 62 views
1

我有一個名爲UserList的表,它具有UserName和UserPassword列。當我查詢如下,它工作並返回正確的數據。選擇不適用於SQL Server 2017中的變量

SELECT * FROM dbo.UserList WHERE UserName = 'aliserin' 

但是,當我嘗試它如下,它不給我任何結果。它只是返回空。它沒有給出錯誤,但我真的不明白原因。如果它很重要,它是一個本地數據庫。

declare 
@UserName as NVARCHAR 

SET 
@UserName = 'aliserin' 
SELECT * FROM dbo.UserList WHERE UserName = @UserName 

當我在下面的UserId約束上嘗試相同的代碼時,它可以工作。有誰知道爲什麼?

DECLARE @UserName1 AS NVARCHAR 

SET @UserName1 = 2 

SELECT * FROM dbo.UserList WHERE UserId = @UserName1 

回答

4

你需要指定一個長度參數爲varchar類型:What is the effect of omitting size in nvarchar declaration

如果沒有在數據定義或變量聲明語句中指定n,則默認長度爲1。當沒有使用CAST函數指定n時,默認長度爲30.

這意味着您的查詢實際上是在做SELECT * FROM UserList WHERE UserName = 'a'

所以,你想:

DECLARE @userName AS nvarchar(8) 
SET @userName = 'aliserin' 
SELECT * FROM dbo.UserList WHERE UserName = @userName 

您也可以通過使用DECLARE =語法和省略AS關鍵字(我避免使用AS的類型,因爲它是通常用來別名列名)

DECLARE @userName nvarchar(8) = 'aliserin' 
SELECT * FROM dbo.UserList WHERE UserName = @userName 
簡化這個
相關問題