2015-11-02 2 views
0

У меня есть база данных с названием «Союз». Я пытаюсь выполнить SQL для этой базы данных в таблице MAINT, но поскольку «union» - это команда SQL, она бросает ошибки. Я могу получить запрос для запуска при выполнении из базы данных Union. Будет ли динамический SQL иметь возможность исправить мою проблему или изменить имя базы данных?Имя команды SQL - это имя базы данных; Использовать динамический SQL?

я получаю неправильный синтаксис около «UNION» ключевое слово здесь то, что я до сих пор,

 DECLARE @sql varchar(max) 
DECLARE @Database varchar(5) 
Set @Database = 'UNION' 


SELECT @sql = 'SELECT '[email protected]+' as ''Database'', '[email protected]+'.hsi.useraccount.username as ''User Name'', 
'[email protected]+'.hsi.useraccount.realname as ''Real Name'' 
FROM '[email protected]+'.hsi.useraccount 
WHERE '[email protected]+'.hsi.useraccount.username NOT LIKE ''%deactivated%'' and '[email protected]+'.hsi.useraccount.username not like ''%administrator'' and '[email protected]+'.hsi.useraccount.username not like ''%internal%''' 

execute(@sql) 
+5

Используйте квадратные скобки вокруг имени ('[Союз]') – Siyual

+0

@Siyual: Мог бы также сделать этот комментарий ответ и получить правильный кредит для этого. –

ответ

3

Добавить [] скобки вокруг имен Schema.

SELECT @sql = REPLACE('SELECT [@Database] as ''Database'', [@Database].hsi.useraccount.username as ''User Name'', 
[@Database].hsi.useraccount.realname as ''Real Name'' 
FROM [@Database].hsi.useraccount 
WHERE [@Database].hsi.useraccount.username NOT LIKE ''%deactivated%'' and [@Database].hsi.useraccount.username not like ''%administrator'' and [@Database].hsi.useraccount.username not like ''%internal%''' 
,'@Database',@Database) 

Пока текст «@Database» текст не появляется нигде в вашем отборном заявлении, просто бросить его в функцию REPLACE() и избегать всего, что внедренных цитат синтаксиса и конкатенации головной боли.

+0

Спасибо, это сработало! – Scott

0

Вы также можете использовать quotename вместо ручного ввода квадратных скобок

declare @db nvarchar(100) 
set @db='performance' 

declare @sql nvarchar(max) 
set @sql='select * from '+QUOTENAME(@db)+'.'+quotename('dbo')+'.'+QUOTENAME('orders') 
print @sql 

exec(@sql) 
Смежные вопросы