كيفية استخدام متغير في اسم قاعدة البيانات الهدف لإدراج عبارة؟
سؤال
أريد إعلان اسم الخادم واستخدام هذا الاسم في عبارة إدراج. حتى الآن كل ما حصلت عليه هو رسالة خطأ.
declare @machine nvarchar(6);
declare @bar nvarchar(3);
set @machine = 'Name00';
set @bar = 'foo'
insert into @machine.dbname.dbo.table (column1, column2)
select (column1, column2)
from table
where column1 = @bar
هذا يعطيني:
Msg 102, Level 15, State 1, Line 6
Incorrect syntax near '.'.
المحلول
لقد واجهت هذه المشكلة من قبل والعمل الوحيد الذي وجدته هو SQL الديناميكي
declare @machine nvarchar(6)
declare @bar nvarchar(3)
declare @sql varchar(2000)
set @machine = 'Name00'
set @bar = 'foo'
Set @sql ='insert into ' + @machine + '.dbname.dbo.table (column1, column2)
select (column1, column2)
from table
where column1 = ''' + @bar + ''''
--print (@sql)
exec (@sql)
نصائح أخرى
سيكون عليك استخدام SQL الديناميكي لهذا الغرض. حاول القيام بما يلي:
declare @machine nvarchar(6);
declare @bar nvarchar(3);
declare @query nvarchar(4000)
set @machine = 'Name00';
set @bar = 'foo'
set @query = 'insert into ' + @machine + '.dbname.dbo.table (column1, column2) select (column1, column2) from table where column1 = ''' + @bar + ''''
execute dbo.sp_executesql @query
إذا كنت بحاجة إلى إدراج قواعد بيانات مختلفة من نفس قاعدة بيانات المصدر ، فاستخدم SQL الديناميكي كما يقول الآخرون.
ومع ذلك ، إذا كانت المشكلة هي أنك تريد مزامنة DevServer1 مع DevServer2 ، و Prodserver1 مع Prodserver2 ، ولديك قاعدة البيانات الأخرى كخيار تكوين ، ثم استخدم المرادفات.
لا تنتمي إلى StackOverflow