我正在尝试创建一组数据库(应该以增量顺序从数据库中的表中(在同一实例中)中选择数据库名称)。任何人都可以帮我怎么做?
DECLARE @loopcounter INT = 1, @Maxid INT = 100, @zid nvarchar(100)
WHILE(@LoopCounter <= @Maxid)
BEGIN
SELECT @zid = zids
FROM dbo.list_zid WHERE id = @LoopCounter
SET @LoopCounter = @LoopCounter + 1
print @zid
end
DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = '@zid'
CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE
GO
答案 0 :(得分:0)
首先警告您必须对表中的文本使用动态SQL,这会让您对各种安全问题保持开放,所以如果您不是100%确定数据库值,请不要这样做!接下来你有它的要点,但你不能只将变量传递给你想要执行的语句。您必须构建字符串然后执行字符串。请参阅示例,了解在何处以及如何执行此操作的逻辑。我没有告诉你如何从你的表中获取你所写的DBName,如果你不知道你不应该使用这种技术,那么你可以弄明白这一点!
DECLARE @loopcounter INT = 1, @Maxid INT = 100, @zid nvarchar(100)
WHILE(@LoopCounter <= @Maxid)
BEGIN
DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = '@zid'
SELECT @zid = zids
FROM dbo.list_zid WHERE id = @LoopCounter
--if you are getting the @zid out of the database I would assume you can also get the name on this query too????
DECLARE @SQLStatements NVARCHAR(MAX)
SET @SQLStatements = '
CREATE DATABASE ' + @DBNAME + '
GO
ALTER DATABASE ' + @DBNAME + ' SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE ' + @DBNAME + ' SET RECOVERY SIMPLE
GO'
EXECUTE (@SQL)
SET @LoopCounter = @LoopCounter + 1
print @zid
END