Ես ունեմ մի քանի DB-եր տարբեր սերվերների վրա և ուզում եմ որոշակի տեղեկատվություն վերցնել աղյուսակից (օրինակ, Օգտվողը, այս աղյուսակը բոլոր DB-ների վրա է): Այսպիսով, ես ավելացնում եմ բոլոր սերվերները և DB-ները կուրսորի վրա և այնուհետև գործարկում եմ այս սցենարը.
BEGIN
fetch next from CursorData into @DBName,@DBServer
set @cmd=':Connect ' + @DBServer+ CHAR(10) + CHAR(13)+ 'use ['+@DBName+'] select * from [UserAccount] where userid='''+@UserID+'''' + CHAR(10) + CHAR(13)+ 'GO'
print @cmd
exec sp_executeSQL @cmd
END
և ես ունեմ հետևյալ սխալը.
(1 row(s) affected)
:Connect DBServer
use [DBName] select * from [UserAccount] where userid='myuserid'
GO
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ':'.
Msg 911, Level 16, State 1, Line 2
Database 'DBName' does not exist. Make sure that the name is entered correctly.
Սերվերի միջև փոխարկվելու համար ես օգտագործել եմ sqlcmd ռեժիմը, բայց չգիտեմ, արդյոք աշխատում է, երբ այն դնում եմ տող, այնուհետև կատարում տող:
Եթե ես գործադրեմ այս հրամանը sqlcmd ռեժիմում.
:Connect DBServer
use [DBName] select * from [UserAccount] where userid='myuserid'
GO
Եթե որևէ մեկը գիտի, թե ինչ եմ բաց թողել, կամ գիտի այլ լուծում դրա համար:
sp_executesql
-ի կողմից կատարվողի համար: Օրինակները, որոնք ես կարող եմ գտնել առցանց, ունենN'''sqlcmd -E -S ' + @@servername + ' -w 1000 /Q "' + @query + '"'''
կամ նման ձևաչափ, քանի որ, ինչպես երևում է,sp_executesql
-ը չի գործումCMD Mode
-ում: 17.10.2016