Warum ist der Zustand @parameter wie (Bedingung) nicht Ergebnisse zurückgeben, während der Parameter durch ein Literal ersetzt wird?

Ich habe das in mssql2008 versucht:

declare @test nvarchar set @test = '12345' select 'true' where @test like '%3%' -- no results, condition fails select 'true' where '12345' like '%3%' -- returns true, condition passes 

Kann mir bitte jemand erklären, warum die erste select-rede kein Ergebnis zurückgibt?

Veränderung

 declare @test nvarchar 

nach

 declare @test nvarchar(10) 

SQL Fiddle DEMO

Also um deine Frage zu beantworten, von nchar und nvarchar (Transact-SQL)

Wenn n nicht in einer datadefinitions- oder variablesdeklarationsanweisung angegeben ist, ist die Standardlänge 1. Wenn n nicht mit der CAST-function angegeben ist, beträgt die Standardlänge 30.

Dies geschieht, weil @test nvarchar mit einer Größe von 1 initialisiert wird, dh es enthält nur '1' aus der Set-statement.

Wenn Sie die deklarationsanweisung auf @test nvarchar (5) ändern, wird es funktionieren.