在存储过程中,我想更改我的代码,以便在其他数据库上使用它。 数据:是数据库的名称 我有其他数据库,例如:DATA2和DATA3。我需要用参数@LocalBase替换DATA。SQL Server:具有多个参数的存储过程
IF NOT EXISTS (SELECT * FROM ['' + @localBase + ''].SYS.SCHEMAS WHERE NAME = @DestinationSchema)
BEGIN
SELECT @SQL = N'USE DATA; EXEC(''CREATE SCHEMA '' + @DestinationSchema + '')'
EXEC sp_executesql @SQL
INSERT INTO dbo.TableLog SELECT @id, @SourceServer, @SourceSchema, 'GetAllTables', @DestinationSchema, CURRENT_TIMESTAMP, 'Schema ' + @DestinationSchema + ' created', 2
END
是否有可能(正确)做到这一点? `
@SQL=N'IF NOT EXISTS (SELECT * FROM ['' + @localBase + ''].SYS.SCHEMAS WHERE NAME = @DestinationSchema)'
EXEC sp_executesql @SQL
BEGIN
SELECT @SQL = N'USE ['' + @localBase + '']; EXEC(''CREATE SCHEMA '' + @DestinationSchema + '''')'
EXEC sp_executesql @SQL
INSERT INTO dbo.TableLog SELECT @id, @SourceServer, @SourceSchema, 'GetAllTables', @DestinationSchema, CURRENT_TIMESTAMP, 'Schema ' + @DestinationSchema + ' created', 2
END
`
我想调用存储过程那样:
DECLARE @RC int
DECLARE @SourceServer nvarchar(255)
DECLARE @localBase nvarchar(255)
SET @SourceServer = 'Serv1,10001'
SET @localBase = 'DATA1'
EXECUTE @RC = [dbo].[stor_proc_name]
@SourceServer,
@localBase
为什么你要像这样动态创建模式?这有很多红旗,这里有一些非常严重的设计问题。而当你开始使用动态sql时,你需要小心,你不会从我们的老朋友桌面上进行访问。 http://bobby-tables.com/ –
此代码是存储过程代码的一部分。将数据库服务器的表复制到另一台服务器。 存储过程为DATA数据库运行。但我想使它通用于将其应用于其他数据库 – Slim025
嗯,这是有点可怕,但看看你有你的变量@LocalBase。由于这是现在的动态sql字符串的一部分,你将需要'''不'。按照编码,你的字符串中有一个字符串文字。在执行它之前,您需要养成检查动态sql的习惯。如果你看看字符串,你会很快注意到语法错误。 –