How can i avoid using dynamic from clause? Even if i don't know the database name, i prefer to use a static statement
SQL не примет columnnames, tablenames, databasenames как parameters.so, если вам не избежать их, вы не можете избегать динамического SQL ..
Изменить запрос динамического SQL, чтобы избежать error..But снова вы будете иметь проблемы с областью временных таблиц
--This подведет, becau с временной таблица попадет под другой областью
Declare @sql nvarchar(4000)
set @sql='
select *
into #tempTable
from @DBName.Invoices
where InvoiceId = 5'
--- один из вариантов являются использование глобальных временных таблиц
declare @dbname varchar(1000)
set @dbname=db_name()
declare @sql nvarchar(4000)
set @sql='select *
into ##tempTable
from '[email protected]+'.dbo.test_Delete '
exec(@sql)
select * from ##temptable
Но будьте осторожны с вышеизложенным подходом, так как выше временной таблицы имеет глобальный масштаб ..
вы также можете использовать OpenRowset, некоторые вещи, как ниже
select * into #temp from openrowset
('SQLNCLI','Server=yourinstancename;Trusted_Connection=yes;', 'select * form table')
Что вы пытаетесь сделать? Вы не можете выбрать объект, хранящийся в переменной, без использования динамического sql. –
К сожалению, только динамический sql поможет. Вы можете создать свой собственный proc или использовать неподдерживаемый sp_MSforEachDB http://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx – Serg