2015-11-05 184 views
0

的模式我有以下几点:删除使用变量名

DECLARE @SchemaName NVARCHAR(MAX) 
SET @SchemaName = 'MySchema' 

DROP SCHEMA MySchema 

我应该如何去使用变量?我试过DROP SCHEMA OBJECT_ID(@SchemaName)

也许DELETE FROM SYS.SCHEMAS WHERE NAME = @SchemaName等于DROP

回答

3

删除记录的尝试是这样的:

DECLARE @sql nvarchar(max), @SchemaName NVARCHAR(MAX) 
SET @SchemaName = 'MySchema' 

set @sql = 'DROP SCHEMA ' + quotename(@SchemaName) 

---print @sql 
exec sp_executesql(@sql) 
+0

完美,因为我已经有一个@sql,我可以用它来添加这个。 (使用COALESCE) – grmbl

3

尝试使用动态SQL

DECLARE @SchemaName NVARCHAR(MAX) 
SET @SchemaName = 'test' 

DECLARE @sql NVARCHAR(128)= '' 

SET @sql = 'DROP SCHEMA ' + quotename(@SchemaName) + '' 

--print @sql 
EXEC (@sql) 

此外,我不认为你可以从SYS.SCHEMAS视图

+4

我想你可能想' EXEC(@sql)'而不是'EXEC @ sql',同样,使用'QUOTENAME()'而不是手动连接括号是个好主意,因为'QUOTENAME()'会正确地转义字符。考虑下面的模式 - “CREATE SCHEMA”Stupid [] Name“;' - 使用quotename可以正确地转义给出:[Stupid []] Name],而只是连接括号会给[Stupid [] Name],导致一个语法错误。虽然我承认这是一个可恶的对象名称,但有时候人们需要迎合这一点。 – GarethD

+0

@GarethD - 同意!!更新:) –