日期:2014-05-17  浏览次数:20562 次

求助一个存储过程中遇到的问题
编译能编译过去,但执行时老是提示错误
DECLARE @db1 nvarchar(50)
DECLARE @sql nvarchar(200)
SET @sql='IF NOT EXISTS (SELECT name FROM sys.databases WHERE name= '+ QUOTENAME(@db1,'''') + ')' 
exec(@sql)

执行时,提示在)附近有错误


换成
DECLARE @db1 nvarchar(50)
DECLARE @sql nvarchar(200)
SET @sql='IF NOT EXISTS (SELECT name FROM sys.databases WHERE name=QUOTENAME(@db1,''''))'
exec sp_executesql @sql,N'@db1 NVARCHAR(50)',@db1

也是一样的错误,请教为什么,如果不使用@sql变量,执行就不会报错的。

------解决方案--------------------
DECLARE @db1 nvarchar(50)
DECLARE @sql nvarchar(200)
set @db1='pub'
SET @sql='IF NOT EXISTS (SELECT name FROM sys.databases WHERE name= '+ QUOTENAME(@db1,'''') + ')
go
begin
select '''+@db1+'''
end' 
exec(@sql)

你后面没语句当然不行呐