SQL动态创建存储过程?

时间:2013-07-19 04:17:13

标签: sql sql-server-2005 stored-procedures dynamic-sql

我正在尝试创建一个脚本来创建/设置一组非常相似的存储过程。

因此,我尝试循环使用此代码,并在需要时更改@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的可能解决方案?

3 个答案:

答案 0 :(得分:2)

我不会直观地称解决方案,但显然this有效。我更喜欢this one的外观。

答案 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 

这对我来说很完美