2016-03-03 3 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_name и sys.databases.name колонн.

+1

Я был на 20 секунд слишком медленным lol – dotjoe

+2

Вы также можете использовать 'sysname' в качестве типа данных. –

+0

Aha ... длина была создана ADO.net. –

Смежные вопросы