我正在尝试创建一个脚本来创建/设置一组非常相似的存储过程。
因此,我尝试循环使用此代码,并在需要时更改@DATABASE_NAME
和@TableName
。
/* Start loop */
DECLARE @create_stored_procedure nvarchar(max)
SET @create_stored_procedure = N'
USE [' + @DATABASE_NAME + ']
CREATE PROCEDURE [dbo].[sproc_imp_' + @TableName + ']
AS
BEGIN
PRINT(''doing something'')
END'
EXEC sp_executesql @statement = @create_stored_procedure
/* End loop */
但我收到的错误是
'CREATE / ALTER PROCEDURE'必须是查询批处理中的第一个语句。
或
'CREATE / ALTER PROCEDURE'不允许将数据库名称指定为对象名称的前缀。
所有在线解决方案都建议使用GO,但这在动态SQL中不起作用。
有没有人知道SQL Server 2005的可能解决方案?
答案 0 :(得分:2)
答案 1 :(得分:1)
我尝试了Nithesh的答案,这对我不起作用,最终在主表中创建了存储过程。 Zec的答案奏效了。在我的动态查询中创建动态查询。
DECLARE @create_store_procedure nvarchar(max)
DECLARE @use_db nvarchar(max)
SET @create_store_procedure = N'
CREATE PROCEDURE [dbo].[sproc_imp_' + @TableName + ']
AS
BEGIN
PRINT(''doing something'')
END '
SET @use_db = N'
USE [' + @DATABASE_NAME + ']
DECLARE @sub_create_store_procedure nvarchar(max)
SET @sub_create_store_procedure = ''' + REPLACE(@create_store_procedure, CHAR(39), CHAR(39) + CHAR(39)) + '''
EXEC sp_executesql @statement = @sub_create_store_procedure
'
EXEC sp_executesql @statement = @use_db
答案 2 :(得分:0)
尝试使用spiting USe DB并创建过程。喜欢这个
DECLARE @create_store_procedure nvarchar(max)
SET @create_store_procedure = N'
USE [' + @DATABASE_NAME + '] '
EXEC sp_executesql @statement = @create_store_procedure
SET @create_store_procedure = N'
CREATE PROCEDURE [dbo].[sproc_imp_' + @TableName + ']
AS
BEGIN
PRINT(''doing something'')
END '
EXEC sp_executesql @statement = @create_store_procedure
这对我来说很完美