该
use命令仅在您所在的范围内更改当前数据库,而动态SQL在其自己的范围内运行。
试试这个
master
declare @SQL nvarchar(max)set @SQL = N'use tempdb; print db_name()'exec(@SQL)print db_name()
结果:
tempdbmaster
试试这个:
DECLARE @DBName NVARCHAr(50) = 'TheDBName';DECLARE @SQL NVARCHAr(max)DECLARE @SQLMain NVARCHAr(max)DECLARE @Counter intSET @SQLMain = 'Use [' + @DBName + ']; exec(@SQL)';SET @Counter = 1;WHILE @Counter <=3BEGIN SET @SQL = 'CREATE SCHEMA [' + CASE @Counter WHEN 1 THEN 'Schema1' WHEN 2 THEN 'Schema2' WHEN 3 THEN 'Schema3' END SET @SQL = @SQL + '] AUTHORIZATION [dbo]'; EXEC sp_executesql @SQLMain, N'@SQL nvarchar(max)', @SQL; SET @Counter = @Counter + 1;END



