2016-03-03 77 views
0

爲什麼'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' 

回答

6

您的數據庫名稱參數是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生成。 –