为什么此查询匹配错误的数据库名称?

为什么此查询匹配错误的数据库名称?

问题描述:

为什么'TestDatabase2'也匹配'TestDatabase'?同样,'D2'也匹配'D'。为什么此查询匹配错误的数据库名称?

exec sp_executesql N'SELECT TOP 1 
        sdb.name AS DbName, 
        bus.backup_start_date AS LastBackUpTime, 
        bus.type AS Type 
       FROM 
        sys.sysdatabases sdb 
       LEFT OUTER JOIN 
        msdb.dbo.backupset bus 
       ON 
        bus.database_name = sdb.NAME 
        AND 
        bus.type = @backupType 
       WHERE 
        sdb.name = @dbname 
       ORDER BY 
        LastBackUpTime DESC',N'@dbName nvarchar(12),@backupType nvarchar(1)',@dbName=N'TestDatabase',@backupType=N'D' 

您的数据库名称参数是NVARCHAR(12)

猜猜TestDatabase多少个字符是;)

SELECT CAST('TestDatabase' as NVARCHAR(12)), CAST('TestDatabase12314' as NVARCHAR(12)) 

你应该让一个NVARCHAR(128)SYSNAME,这是msdb.dbo.backupset.database_namesys.databases.name列的长度。

+1

我20秒太慢大声笑 – dotjoe

+2

你也可以使用'sysname'作为数据类型。 –

+0

Aha ...长度由ADO.net生成。 –