为什么此查询匹配错误的数据库名称?
问题描述:
为什么'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_name
和sys.databases.name
列的长度。
我20秒太慢大声笑 – dotjoe
你也可以使用'sysname'作为数据类型。 –
Aha ...长度由ADO.net生成。 –