2015-11-05 180 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 - 同意!!更新:) –