برنامه نویس

به وبلاگ خودتان خوش آمدید.

برنامه نویس

به وبلاگ خودتان خوش آمدید.

دستور update با وجود sum

UPDATE table1
   SET field1 = (SELECT SUM(field2)
                   FROM table2 AS t2
                  WHERE t2.field3 = t1.field3)
  FROM table1 AS t1


or

UPDATE table1 SET field1 = (SELECT SUM(t2.field2) FROM TABLE2 t2 WHERE t2.field3 = field2)

دستور update در زمان شرطی بودن عملکرد (if-else)

update <sometable>
set field = case when <condition> then <newvalue> else field end
where <condition>

دستور Update با join در Sql Server

update item_master
set mf_item_number = (some value)
from 
   group_master as gm
   join Manufacturar_Master as mm ON ........
where
 .... (your conditions here)

-----------------------------------
UPDATE A SET foo = B.bar FROM TableA A JOIN TableB B ON A.col1 = B.colx WHERE ...

استفاده ازstored procedure با پارامتر خروجی در sql server

ALTER PROCEDURE testme @input  VARCHAR(10),
                       @output VARCHAR(20) output
AS
  BEGIN
      IF @input >= '1'
        BEGIN
            SET @output = 'i am back';

            RETURN;
        END
  END

DECLARE @get VARCHAR(20);

EXEC testme
  '1',
  @get output

SELECT @get 

جدا کردن بخشی از متن از اخرین "\" در sql server

DECLARE @FilePath VARCHAR(50)
DECLARE @FindChar VARCHAR(1)
set @FilePath= 'My\Super\Long\String\With\Long\Words'
set @FindChar= '\'
-- Shows text before last slash
SELECT LEFT(@FilePath, LEN(@FilePath) - CHARINDEX(@FindChar,REVERSE(@FilePath))) AS Before
-- Shows text after last slash
SELECT RIGHT(@FilePath, CHARINDEX(@FindChar,REVERSE(@FilePath))-1) AS After
-- Shows the position of the last slash
SELECT LEN(@FilePath) - CHARINDEX(@FindChar,REVERSE(@FilePath)) AS LastOccuredAt

تغییر نام دیتابیس در sql server 2000

EXEC sp_renamedb 'oldName', 'newName'
Go
ALTER DATABASE oldName MODIFY FILE (NAME=N'oldName_Data', NEWNAME=N'newName_Data')
GO
ALTER DATABASE oldName MODIFY FILE (NAME=N'oldName_Log', NEWNAME=N'newName_Log')
GO

تشخیص مسیر دیتابیس در sql server


DECLARE @DBAddress nvarchar(4000),@Address nvarchar(4000),
                @Index int
SELECT @DBAddress=[filename]
FROM master.dbo.sysdatabases where name = (select db_name())

SET @Index=CHARINDEX('\DB\',@DBAddress)
SET @Address=SUBSTRING(@DBAddress,1,@Index)

دستور CURSOR در Sql Server

DECLARE cursor1 CURSOR
    FOR select field1,field2,... from table1
OPEN cursor1
FETCH NEXT from cursor1 into  @field1,@field2,...
WHILE @@FETCH_STATUS = 0
BEGIN
دستورات مورد نظر
FETCH NEXT FROM cursor1 INTO  @field1,@field2,...
end
CLOSE cursor1
DEALLOCATE cursor1

تبدیل تاریخ به فرمت کاراکتر در sql server

دستور ان به صورت زیر نوشته میشود :

CONVERT(data_type(length),expression,style)

اسکریپت زیر حالت ها مختلف تبدیل تاریخ به رشته را نمایش میدهد

CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),10)
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),6)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

CONVERT(VARCHAR(10),GETDATE(),11)

خروجی به صورت زیر نمایش داده میشود

Nov 04 2011 11:45 PM
11-04-11
11-04-2011
04 Nov 11
04 Nov 2011
04 Nov 2011 11:45:34:243 

14/12/06

این هم جدولی که نوع نمایش میتونید مشخص کنید


Value
(century yy)
Value
(century yyyy)
input/output
-0 or 100mon dd yyyy hh:miAM (or PM)
1101mm/dd/yy
2102yy.mm.dd
3103dd/mm/yy
4104dd.mm.yy
5105dd-mm-yy
6106dd mon yy
7107Mon dd, yy
8108hh:mm:ss
-9 or 109mon dd yyyy hh:mi:ss:mmmAM (or PM)
10110mm-dd-yy
11111yy/mm/dd
12112yymmdd
-13 or 113dd mon yyyy hh:mi:ss:mmm (24h)
14114hh:mi:ss:mmm (24h)
-20 or 120yyyy-mm-dd hh:mi:ss (24h)
-21 or 121yyyy-mm-dd hh:mi:ss.mmm (24h)
-126yyyy-mm-ddThh:mi:ss.mmm (no spaces)
-130dd mon yyyy hh:mi:ss:mmmAM
-131dd/mm/yy hh:mi:ss:mmmAM





پروسیژر ایجاد فایل پشتیبان و بازیابی اطلاعات بر روی دیتابیس جدید در sql


CREATE Procedure NewDoreh
@Path_DB    varchar(500)
As
Declare         @CountDattabase   int   
Declare     @Name_DB    nvarchar(50)
Declare     @Path_Data_File    nvarchar(500)
Declare     @Path_Log_File    nvarchar(500)
Declare     @SysName    varchar(10)
Declare     @DFName        varchar(14)
Declare     @LFName        varchar(14)

SET @SysName='databasename'
select @CountDattabase=count(name) from master.dbo.sysdatabases where name like '%databasename%'

SET @DFName=@SysName+'_Data'
SET @LFName=@SysName+'_Log'

SET @Name_DB=@SysName+ltrim(rtrim(Str(@CountDattabase+1)))
SET @Path_Data_File=rtrim(@Path_DB)+@Name_DB+'.mdf'
SET @Path_Log_File=rtrim(@Path_DB)+@Name_DB+'.ldf'

Declare @SQL_ Nvarchar(4000)

SET @SQL_= N'
Backup DataBase '+@SysName+ltrim(Str(@CountDattabase))+' To Disk='''+@Path_DB+'Bdatabasename.Bak'''
exec sp_executesql @SQL_

SET @SQL_= N'RESTORE DATABASE '+@Name_DB+' FROM  DISK ='''+ @Path_DB+'Bdatabasename.bak'' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY ,  MOVE '''+@DFName +''' TO '''+@Path_Data_File+''',  MOVE '''+@LFName+''' TO '''+ @Path_Log_File+''''
exec sp_executesql @SQL_

select 1

GO

پیدا کردن بزرگترین مقدار در یک رکورد از جدول sql

در مثال زیر بزرگترین تاریخ در یک ردیف را پیدا میکند . با توجه به نیاز خود کوئری را تغییر دهید .

 که در ان data_table نام جدول مورد نظر ، date1 ، date2 ، date3 نام فیلدها میباشد .

 


SELECT  MAX(date_columns) AS max_date
FROM    ( (SELECT   date1 AS date_columns
           FROM     data_table         )
          UNION
          ( SELECT  date2 AS date_columns
            FROM    data_table
          )
          UNION
          ( SELECT  date3 AS date_columns
            FROM    data_table
          (
        AS date_query(
و یا 
SELECT  MAX(MostRecentDate)
FROM    ( SELECT    CASE WHEN date1 >= date2
                              AND date1 >= date3 THEN date1
                         WHEN date2 >= date1
                              AND date2 >= date3 THEN date2
                         WHEN date3 >= date1
                              AND date3 >= date2 THEN date3
                         ELSE date1
                    END AS MostRecentDate
          FROM      data_table
        ) AS date_query 

تبدیل عدد به حروف در sql


create FUNCTION dbo.Num_ToWords (
 
    @Number Numeric (38, 0) -- Input number with as many as 18 digits
 
) RETURNS VARCHAR(8000)
 
AS BEGIN

DECLARE @inputNumber VARCHAR(38)
DECLARE @NumbersTable TABLE (number int, word VARCHAR(10))
DECLARE @outputString VARCHAR(8000)
DECLARE @length INT
DECLARE @counter INT
DECLARE @loops INT
DECLARE @position INT
DECLARE @chunk CHAR(3)
DECLARE @tensones CHAR(2)
DECLARE @hundreds CHAR(1)
DECLARE @tens CHAR(1)
DECLARE @ones CHAR(1)
DECLARE @And nvarchar(3)
DECLARE @Neg nvarchar(10)
 
    IF @Number = 0 return 'صفر'
    
    IF  Left(@Number ,1) <> '-'
        SET  @Neg = ' '
    ELSE
    BEGIN
        SET  @Neg = 'منفی '
        SET  @Number = @Number * -1
    END
 
SELECT @inputNumber = CONVERT(varchar(38), @Number)
     , @outputString = ''
     , @counter = 1
SELECT @length   = LEN(@inputNumber)
     , @position = LEN(@inputNumber) - 2
     , @loops    = LEN(@inputNumber)/3
 
 
IF LEN(@inputNumber) % 3 <> 0 SET @loops = @loops + 1
 
 
INSERT INTO @NumbersTable   SELECT 0, ''
    UNION ALL SELECT 1, ' یک '      UNION ALL SELECT 2, ' دو '
    UNION ALL SELECT 3, ' سه '    UNION ALL SELECT 4, ' چهار '
    UNION ALL SELECT 5, ' پنج '     UNION ALL SELECT 6, ' شش '
    UNION ALL SELECT 7, ' هفت '    UNION ALL SELECT 8, ' هشت '
    UNION ALL SELECT 9, ' نه '     UNION ALL SELECT 10, ' ده '
    UNION ALL SELECT 11, ' یازده '   UNION ALL SELECT 12, ' دوازده '
    UNION ALL SELECT 13, ' سیزده ' UNION ALL SELECT 14, ' چهارده '
    UNION ALL SELECT 15, ' پانزده '  UNION ALL SELECT 16, ' شانزده '
    UNION ALL SELECT 17, ' هفده ' UNION ALL SELECT 18, ' هیجده '
    UNION ALL SELECT 19, ' نوزده ' UNION ALL SELECT 20, ' بیست '
    UNION ALL SELECT 30, ' سی '   UNION ALL SELECT 40, ' چهل '
    UNION ALL SELECT 50, ' پنجاه '    UNION ALL SELECT 60, ' شصت '
    UNION ALL SELECT 70, ' هفتاد '  UNION ALL SELECT 80, ' هشتاد '
    UNION ALL SELECT 90, ' نود '   UNION ALL SELECT 100, ' صد '
    UNION ALL SELECT 200, ' دویست '   UNION ALL SELECT 300, ' سیصد '
    UNION ALL SELECT 400, ' چهارصد '   UNION ALL SELECT 500, ' پانصد '
    UNION ALL SELECT 600, ' ششصد '   UNION ALL SELECT 700, ' هفتصد '
    UNION ALL SELECT 800, ' هشتصد '   UNION ALL SELECT 900, ' نهصد '
 
 
WHILE @counter <= @loops BEGIN
 
    SET @chunk = RIGHT('000' + SUBSTRING(@inputNumber, @position, 3), 3)
    
 
    IF @chunk <> '000' BEGIN
        SELECT @tensones = SUBSTRING(@chunk, 2, 2)
             , @hundreds = SUBSTRING(@chunk, 1, 1)
             , @tens = SUBSTRING(@chunk, 2, 1)
             , @ones = SUBSTRING(@chunk, 3, 1)
 
        IF CONVERT(INT, @tensones) <= 20 OR @Ones='0' BEGIN
                if len(@outputString)>0
                    begin
                    set @And='و '
                    end
                else
                    begin
                    set @And=''
                    end
                    
                SET @outputString = (SELECT word
                                    FROM @NumbersTable
                                    WHERE @hundreds+'00'  = number)
                            + case @hundreds when '0' then '' else
                                case @tensones when '00' then '' else 'و' end  end+
                            (
                                    SELECT word
                                      FROM @NumbersTable
                                      WHERE @tensones = number)
                   + CASE @counter WHEN 1 THEN '' -- No name
                       WHEN 2 THEN ' هزار ' WHEN 3 THEN ' میلیون '
                       WHEN 4 THEN ' میلیارد '  WHEN 5 THEN ' بیلیون '
                       WHEN 6 THEN ' بیلیارد ' WHEN 7 THEN ' کوانتیلیون '
                       WHEN 8 THEN ' سکستیلیون '  WHEN 9 THEN ' سپتیلیون '
                       WHEN 10 THEN ' اکتیلیون '  WHEN 11 THEN ' نونیلیون '
                       WHEN 12 THEN ' دسیلیون '  WHEN 13 THEN ' اندسیلیون '
                       ELSE '' END
                               + @And + @outputString
            END
 
         ELSE BEGIN
 
                    if len(@outputString)>0
                    begin
                    set @And='و '
                    end
                else
                    begin
                    set @And=''
                    end
                    
                
 
                SET @outputString = ' '
                            + (SELECT word
                                    FROM @NumbersTable
                                    WHERE @hundreds+'00'  = number)
                             + case @hundreds when '0' then '' else  'و' end
                            + (SELECT word
                                    FROM @NumbersTable
                                    WHERE   @tens+'0'  = number)
                             + 'و'
                             + (SELECT word
                                    FROM @NumbersTable
                                    WHERE  @ones = number)
                   + CASE @counter WHEN 1 THEN '' -- No name
                       WHEN 2 THEN ' هزار ' WHEN 3 THEN ' میلیون '
                       WHEN 4 THEN ' میلیارد '  WHEN 5 THEN ' بیلیون '
                       WHEN 6 THEN ' بیلیارد ' WHEN 7 THEN ' کوانتیلیون '
                       WHEN 8 THEN ' سکستیلیون '  WHEN 9 THEN ' سپتیلیون '
                       WHEN 10 THEN ' اکتیلیون '  WHEN 11 THEN ' نونیلیون '
                       WHEN 12 THEN ' دسیلیون '  WHEN 13 THEN ' اندسیلیون '
                       ELSE '' END
                            + @And + @outputString
        END
        
 
    END
 
    SELECT @counter = @counter + 1
         , @position = @position - 3
 
END
 
SET @outputString = LTRIM(RTRIM(REPLACE(@outputString, '  ', ' ')))
SET @outputstring = UPPER(LEFT(@outputstring, 1)) + SUBSTRING(@outputstring, 2, 8000)
SET @outputstring = @Neg + @outputstring
 
RETURN @outputString
END
GO
 
GRANT EXEC on dbo.Num_ToWords TO PUBLIC
GO
 
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON

تبدیل تاریخ شمسی به حروف در sql

تابع date_to_words با سه پارامتر ورودی که سال و ماه و روز را به صورت رشته ای دریافت و یک رشته برمیگرداند . خود کد واضح و نیاز به توضیح نداره . نظر یادتون نشه .


  create FUNCTION date_to_words (@year_ as varchar(4),@mon_ as varchar(2),@day_ as varchar(2) ) RETURNS
  VARCHAR(100)
   as
    BEGIN
/*
declare @year_ as varchar(4)
declare @mon_ as varchar(2)
declare @day_ as varchar(2)

set @year_='1390'
set @mon_='01'
set @day_='02'*/
    /* Converts date into words */
    DECLARE @yr INT
    DECLARE @dateval INT
    DECLARE @thousand INT
    DECLARE @hundred  INT
    DECLARE @tens INT
    DECLARE @mon INT
    DECLARE @tensword VARCHAR(10)
    DECLARE @onesword VARCHAR(10)
    DECLARE @thousandsword VARCHAR(20)
    DECLARE @hundredsword  VARCHAR(20)
    DECLARE @datevalsword VARCHAR(20)
    DECLARE @MonWord VARCHAR(20)
 

    SET @yr=cast(@year_ as int)
    SET @dateval=cast(@day_ as int)
    Set @mon=cast(@mon_ as int)


    /* Mon TO WORDS */

    SELECT @MonWord =CASE @Mon
    WHEN 1 THEN ' فروردین ماه '
    WHEN 2 THEN  ' اردیبهشت ماه '
    WHEN 3 THEN  ' خرداد ماه '
    WHEN 4 THEN  ' تیر ماه '
    WHEN 5 THEN  ' مرداد ماه '
    WHEN 6 THEN  ' شهریور ماه '
    WHEN 7 THEN  ' مهر ماه '
    WHEN 8 THEN  ' ابان ماه '
    WHEN 9 THEN  ' اذر ماه '
    WHEN 10 THEN  ' دی ماه '
    WHEN 11 THEN  ' بهمن ماه '
    WHEN 12 THEN  ' اسفند ماه '
    END
    /* DAY TO WORDS */

    SELECT @datevalsword =CASE @dateval
    WHEN 1 THEN 'اول'
    WHEN 2 THEN  'دوم '
    WHEN 3 THEN  'سوم '
    WHEN 4 THEN  'چهارم '
    WHEN 5 THEN  'پنجم '
    WHEN 6 THEN  'ششم '
    WHEN 7 THEN  'هفتم '
    WHEN 8 THEN  'هشتم '
    WHEN 9 THEN  'نهم '
    WHEN 10 THEN  'دهم '
    WHEN 11 THEN  'یازدهم '
    WHEN 12 THEN  'دوازدهم '
    WHEN 13 THEN  'سیزدهم '
    WHEN 14 THEN  'چهاردهم '
    WHEN 15 THEN  'پانزدهم '
    WHEN 16 THEN  'شانزدهم '
    WHEN 17 THEN  'هفدهم '
    WHEN 18 THEN  'هجدهم '
    WHEN 19 THEN  'نوزدهم '
    WHEN 20 THEN  'بیستم '
    WHEN 21 THEN  ' بیست و یکم '
    WHEN 22 THEN  ' بیست و دوم '
    WHEN 23 THEN  'بیست و سوم'
    WHEN 24 THEN  'بیست و چهارم '
    WHEN 25 THEN  'بیست و پنجم '
    WHEN 26 THEN  'بیست و ششم '
    WHEN 27 THEN  'بیست و هفتم '
    WHEN 28 THEN  'بیست و هشتم '
    WHEN 29 THEN  'بیست و نهم '
    WHEN 30 THEN  'سیم '
    WHEN 31 THEN  'سی و یکم '
    END 

    /* YEAR TO WORDS */

    set @thousand=floor(@yr/1000) 
    set @yr = @yr - @thousand * 1000
    set @hundred = floor(@yr / 100)
    set @yr = @yr - @hundred * 100

    IF (@yr > 19)
    begin
    set @tens = floor(@yr / 10)
    set @yr = @yr % 10
    end
    ELSE
    set @tens=0

    SELECT @thousandsword=CASE @thousand
    WHEN 1 THEN  ' یک هزار '
    WHEN 2 THEN  'دو هزار'
    WHEN 3 THEN  'سه هزار'
    WHEN 4 THEN  'چهار هزار'
    WHEN 5 THEN  'پنج هزار'
    WHEN 6 THEN  'شش هزار'
    WHEN 7 THEN  'هفت هزار'
    WHEN 8 THEN  'هشت هزار'
    WHEN 9 THEN  'نه هزار'
    else ''
    END  

    SELECT @hundredsword=CASE @hundred
    WHEN 0 then ''
    WHEN 1 THEN  'یک صد'
    WHEN 2 THEN  'دویست '
    WHEN 3 THEN  'سیصد '
    WHEN 4 THEN  'چهارصد '
    WHEN 5 THEN  'پانصد '
    WHEN 6 THEN  'ششصد '
    WHEN 7 THEN  'هفتصد '
    WHEN 8 THEN  'هشتصد '
    WHEN 9 THEN  'نهصد '
    else ''
    END  
    if (@hundred<>'')
    set @hundredsword=' و '+@hundredsword

    /*@tens To WORDS*/
    SELECT @tensword=CASE @tens
    WHEN 2 THEN  'بیست '
    WHEN 3 THEN  'سی '
    WHEN 4 THEN  'چهل '
    WHEN 5 THEN  'پنجاه '
    WHEN 6 THEN  'شصت '
    WHEN 7 THEN  'هفتاد '
    WHEN 8 THEN  'هشتاد '
    WHEN 9 THEN  'نود '
    ELSE ''
    END  
    if (@tens<>'')
    set @tensword=' و '+@tensword
    /*ONES To WORDS*/
    SELECT @onesword=CASE @yr
    WHEN 0 THEN ''
    WHEN 1 THEN  'یک '
    WHEN 2 THEN  'دو '
    WHEN 3 THEN  'سه '
    WHEN 4 THEN  'چهار '
    WHEN 5 THEN  'پنج '
    WHEN 6 THEN  'شش '
    WHEN 7 THEN  'هفت '
    WHEN 8 THEN  'هشت '
    WHEN 9 THEN  'نه '
    WHEN 10 THEN  'ده '
    WHEN 11 THEN  'یازده '
    WHEN 12 THEN  'دوازده '
    WHEN 13 THEN  'سیزده '
    WHEN 14 THEN  'چهارده '
    WHEN 15 THEN  'پانزده '
    WHEN 16 THEN  'شانزده '
    WHEN 17 THEN  'هفده '
    WHEN 18 THEN  'هجده '
    WHEN 19 THEN  'نوزده  '
    END 
    if (@yr<>'')
    set @onesword=' و '+@onesword
    return (@datevalsword+@monWord+@thousandsword+@hundredsword+ @tensword+' '+@onesword)
  END



دستورات Sql

در اینجا یکسری از دستورات sql گذاشتم که در کدنویسی  کاربردهای زیادی دارند  و من تنها نمونه ای از انها رو اوردم . help نرم افزار sql server  اطلاعات بیشتری را در اختیار شما قرار میدهد . به امید انکه مورد استفاده دوستان قرار گیرد .

یافتن نام Instance فعال

SELECT   CONVERT(char(20), SERVERPROPERTY('servername')) as Instance Name

یافتن نام سیستم

SELECT   CONVERT(char(20), SERVERPROPERTY('MachineName') ) as serverName

SERVERPROPERTY دارای پارامترهای زیادی است که با تغییر ان می توان اطلاعات زیادی به دست اورد .

یافتن نام database

برای پیدا کردن نام database از این دستور می توانید استفاده کنید که ارگمانهای زیادی دارد . information_schema این دستور کاربردهای بیشتری دارد که با جستجوی بیشتر اطلاعات بیشتری پیدا میکنید .

SELECT table_catalog'tablecatalog' FROM information_schema.columns WHERE table_name = 'نام جدول'

یافتن نام فیلدها ، نوع ، سایز و...

SELECT column_name 'Column Name',

data_type 'Data Type',

CHARacter_maximum_length 'Maximum Length'

FROM information_schema.columns

WHERE table_name = 'نام جدول'

فارسی کردن فیلدها

برای این کار می توان از قسمت توضیحات که در زمان طراحی برای هر فیلد وجود دارد استفاده کرد . در این حالت نام فیلدها را به همراه فیلد توضیحات برای شما می اورد .

select a.value,b.name from sysproperties a full Join syscolumns b 

on )a.smallid=b.colid) and ( a.id=b.id ) where

b.id in (Select id from sysobjects where name ='نام جدول'(

یافتن refrence های یک جدول

اگر یک جدول به چنیدین جدول دیگر ارتباط داشته باشد برای فهمیدن این موضوع از دستور زیر استفاده کنید .

select * from sysobjects where parent_obj in )select id from sysobjects where name='نام جدول'(

select * from sysreferences where Constid=' ای دی نتیجه قبل را قرار میدهیم در اینجا  ' --constid in refrences = id into sysobjects

select * from sysobjects where id=' rkeyid نتیجه قبل را گذاشت در اینجا باید  '

برقراری ارتباط بین دو instance 

برای این کار در خود sql در قسمت security بر روی Linked Server کلیک راست کرده و گزینه New Linked Server را میزنیم در سربرگ General در مکان Linked Server نام سروری را که می خواهیم به ان متصل شویم  را وارد میکنیم و از قسمت Server Type باید Sql Server را انتخاب کنیم و در سربرگ security قسمت Be Made using this security contex را انتخاب و در قسمت Remote login کلمه sa و در قسمت With password کلمه عبور خود را وارد کنید این کار را در هر دو instance انجام دهید . این عمل را با کد زیر نیز  می توانید انجام دهید به جای instance name نام instance خود را بگذارید .

USE master

GO

EXEC sp_addlinkedserver

    'instance name',

    N'SQL Server'

GO

و یا به صورت

USE master
GO
EXEC sp_addlinkedserver 
   'instance name', 
   '', 
   'MSDASQL',
   NULL,
   NULL,
   'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=;'
GO

حالا ازinstance که در ان قرار دارید به instance دیگری که لینک شده اید دسترسی دارید به عنوان مثال :

select * from[instance name].database name .dbo.table name

select * from [server\Test].Anbar.dbo.test2

براقراری ارتباط  با اراکل

USE master

GO

-- To use named parameters:

EXEC sp_addlinkedserver

   @server = 'LONDON Mktg',

   @srvproduct = 'Oracle',

   @provider = 'MSDAORA',

   @datasrc = 'MyServer'

GO

-- OR to use no named parameters:

USE master

GO

EXEC sp_addlinkedserver

   'LONDON Mktg',

   'Oracle',

   'MSDAORA',

   'MyServer'

GO