Процедура динамического SQL - PullRequest
1 голос
/ 23 марта 2011

Я создал процедуру, которая:

CREATE PROCEDURE test.table_creation (@ID INT) КАК НАЧАТЬ

    DECLARE @SQL VARCHAR(1000)
    DECLARE @SchemaName VARCHAR(50)
    DECLARE @TableName VARCHAR(100)

    SELECT  @SQL = 'Create Table ' + @SchemaName + '.' + @TableName + '('
    SELECT  @SQL = @SQL + 'ID int NOT NULL Primary Key, Name VarChar(10))'

    EXEC (@SQL)

END

Проблема здесь в том, что мне нужно получить имя таблицы и имя схемы из другой таблицы с именем sample. Запрос для получения таков:

SELECT Source_Schema, Source_Table FROM образец, где ID = 12

Как использовать эти значения в описанной выше процедуре.

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Кажется сомнительным требованием (вы можете прочитать Проклятие и благословения динамического SQL ), но

CREATE PROCEDURE test.table_creation (@ID INT)
AS
  BEGIN 
      DECLARE @SQL NVARCHAR(1000) /*Use nvarchar*/
      DECLARE @SchemaName sysname /*Use sysname*/
      DECLARE @TableName sysname

      SELECT @SchemaName = Source_Schema,
             @TableName = Source_Table
      FROM   sample
      where  ID = @ID


       /*Use QUOTENAME*/
      SELECT @SQL = 'Create Table ' + QUOTENAME(@SchemaName) + '.' +
                    QUOTENAME(@TableName) +
                           '(ID int NOT NULL Primary Key, Name VarChar(10))'

      EXEC (@SQL)
  END  
2 голосов
/ 23 марта 2011
SELECT 
   @SchemaName = Source_Schema, 
   @TableName = Source_Table
FROM sample where ID = 12
...