2013-12-03 2 views
0

У меня есть запрос, который я хочу использовать для схем базы данных. Сейчас он написан так, что мне нужно заменить схему в нескольких местах запроса. Как установить это как переменную, чтобы все, что мне нужно сделать, это изменить ее в одном месте?Установить переменную как схему

ответ

0

Синонимы могут быть ответом на ваш вопрос.

+0

Благодарим всех вас за помощь. Я получил довольно далеко от вашего вклада. Однако теперь у меня проблемы с заявлением на печать. – user3063176

+0

набор @query = «установлен @B = (выберите отсчет (*) в качестве B из'[email protected]+'.Customer , где ПРЕОБРАЗОВАНИЯ (VARCHAR (10), CreationDate, 111) = (выберите MAX (CONVERT (VARCHAR (10), CreationDate, 111)) от'[email protected]+'.Customer) ) множество @A = (выберите MAX (CONVERT (VARCHAR (10), CreationDate, 111)) с символа «+ @ с + '. Клиент print' 'Последняя загрузка клиента для' + @ C + 'добавлена' + @ B + 'клиентов в таблицу «[email protected] +». Клиент и произошел в' + @ A – user3063176

1

Вы можете сделать это с помощью динамического SQL:

DECLARE @sql VARCHAR(MAX) 
     ,@schema VARCHAR(255) = 'dbo' 
SET @sql = 'SELECT * 
      FROM '[email protected]+'.yourTable 
      ' 
EXEC (@sql) 

Вы могли бы использовать это в курсоре Переберите схемы-х:

DECLARE @Iterator varchar(255) 
     ,@strSQL varchar(MAX) 
DECLARE xyz CURSOR 
FOR 
--Select stuff to iterate over 
     SELECT name 
     FROM sys.schemas 
OPEN xyz 
FETCH NEXT FROM xyz 
INTO @Iterator 
WHILE @@FETCH_STATUS = 0 
BEGIN 
--Do stuff 
SET @strSQL = 'SELECT * 
       FROM '[email protected]+'.yourTable 
       ' 
Exec (@strSQL) 
    FETCH NEXT FROM xyz 
    INTO @Iterator 
END 
CLOSE xyz 
DEALLOCATE xyz 
GO 

Чтобы проверить свои динамические операторы SQL, вы можете изменить EXEC к PRINT и убедитесь, что результирующий запрос такой, как вы предполагали.

0

Вы можете использовать динамический SQL. Вот пример:

DECLARE @Column varchar(25) 
DECLARE @sqlStmt varchar(max) 
SET @Column = 'MyColumn' 
SET @sqlStmt = N'SELECT ' + @Column + ' FROM MyTable' 
EXEC (@sqlStmt) 
+0

Ответ GoatCO намного лучше, чем мой . :) –

Смежные вопросы