【发布时间】:2011-08-23 16:05:39
【问题描述】:
我想使用游标删除数据库(sql server 2008 r2)的所有同义词。 环境-数据库名称-'mydatabase',模式名称-'dbo'.. 您能否像我尝试的那样指导我,但是 while .. end 的声明无法删除同义词。 w.r.t 游标应该应用什么逻辑?
【问题讨论】:
我想使用游标删除数据库(sql server 2008 r2)的所有同义词。 环境-数据库名称-'mydatabase',模式名称-'dbo'.. 您能否像我尝试的那样指导我,但是 while .. end 的声明无法删除同义词。 w.r.t 游标应该应用什么逻辑?
【问题讨论】:
无需使用光标。按照设定做:
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
【讨论】:
与 Jason 的回答类似,但有一些改进
完全同意这不是您需要光标的地方。
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
【讨论】: