我想使用游标删除数据库的所有同义词(sql server 2008 r2)。 environment-database name-'mydatabase',schema name-'dbo'.. 你可以指导我,因为我尝试但是...结束时的声明,是不能删除同义词。 什么逻辑应该适用于w.r.t光标?
答案 0 :(得分:15)
无需使用游标。按照设定:
declare @n char(1)
set @n = char(10)
declare @stmt nvarchar(max)
select @stmt = isnull( @stmt + @n, '' ) +
'drop synonym [' + SCHEMA_NAME(schema_id) + '].[' + name + ']'
from sys.synonyms
exec sp_executesql @stmt
答案 1 :(得分:2)
与杰森的答案类似,但有一些改进
完全同意这不是你需要光标的地方。
DECLARE @SQL NVARCHAR(MAX) = N''
SELECT @SQL += N'DROP SYNONYM ' + QUOTENAME(SCHEMA_NAME([schema_id])) + N'.' + QUOTENAME(name) + N';' + Char(13) + Char(10)
FROM sys.synonyms
WHERE SCHEMA_NAME([schema_id]) = N'dbo'
EXEC sys.sp_executesql @SQL