2013-07-19 3 views
3

모두 매우 유사한 저장 프로 시저 그룹을 만들거나 설정하는 스크립트를 만들려고합니다.SQL은 동적으로 저장 프로 시저를 생성합니까?

그래서이 코드를 반복하면서 필요하다면 @DATABASE_NAME@TableName을 변경하려고합니다. '/ ALTER 절차 만들기'

말을

/* 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 */ 

하지만 점점 오전 오류는 쿼리 일괄 처리에서 첫 번째 문이어야합니다.

또는

개체 이름에 접두어로 데이터베이스 이름을 지정하는 것을 허용하지 않습니다 '/ ALTER 절차 만들기'.

모든 온라인 솔루션은 GO를 사용하여 제안하지만 동적 SQL에서는 작동하지 않습니다.

누구나 SQL Server 2005에 대한 가능한 해결책을 알고 있습니까?

+0

두 개의 동적 SQL로'use db' 및'create procedure'를 분할하여 시도 했습니까? – Nithesh

답변

2

내가 솔루션은 직관적 호출 할 것이기 완벽하게 작동,하지만 분명히 this 작품이다. 나는 this one의 모양을 선호한다.

0

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 

처럼이 날

+0

나를 위해 실패합니다. 내 "마스터"데이터베이스에 저장 프로 시저를 만들었습니다. 연결된 데이터베이스에 종속적 인 것으로 나타납니다. – Zec

1

나는 Nithesh의 대답을 시도했는데 그것이 나에게 도움이되지 않았다. 결국 master 테이블에 저장 프로 시저가 생성되었다. 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 
관련 문제