Forum
Merhaba Arkadaşlar,
Linked Server üzerinden MySQL e bağlanarak bazı verileri MSSQL e çekmem gerekiyor. Bunun için dinamik bir sorgu hazırlayıp bunu mysql e göndermem gerekiyor ancak sorgudaki karakter sınırı 8000 den fazla olduğu için sorguyu mysql e iletemiyorum. Ortaya çıkan dinamik sorguyu mysql üzerinden çalıştırdığımda sorunsuz şekilde çalıştığını görüyorum. Linked Server üzerinden göndermek istediğim zaman aşağıdaki hatayı almaktayım. Bu problemi aşmanın bir yolu var mı acaba ?
Msg 103, Level 15, State 1, Line 1
The character string that starts with 'Sorgu cümlesi' is too long. Maximum length is 8000.
Merhaba
Hazırlanacak olan sorguya bir değişken atayın, bu değişkenin veritipi varchar(max) olsun. Daha sonra bu Set @degisken 'sql cümlesi' girin, ardından execute ile ile değişkeni çalıştırın.
Merhaba Yavuz Bey,
Bende Tam o şekilde yapıyorum aslında sorguyu aşağıda görebilirsiniz.
DECLARE @ID NVARCHAR(MAX),@Q NVARCHAR(MAX),@Q_FULL NVARCHAR(MAX)
SET @ID=(SELECT '/'+ STUFF((SELECT '/'+id+'/,' FROM ratings
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,''))
SET @ID=REPLACE(@ID,'/','''''')
SET @Q_FULL=N'SELECT * from ratings where id not in('+@ID+')'
SET @Q='SELECT * FROM OPENQUERY(MYSQL_LVZ,'''+ @Q_FULL +''')'
EXEC (@Q_FULL)
Son satırdaki exec i n sonuna linked server adını yazıp dener misiniz
EXECUTE (@Q_FULL) at linked_server_adi
Merhaba Yavuz Bey,
Söylediğinizi yapınca düzeldi. Çok Teşekkürler.
Son satırdaki exec i n sonuna linked server adını yazıp dener misiniz
EXECUTE (@Q_FULL) at linked_server_adi
Merhaba Yavuz Bey,
Söylediğiniz şekilde yaptığım zaman bir sıkıntı yok ancak bu sorgu sonucunu herhangi bir tabloya yazdırmak istediğim zaman aşağıdaki hatayı almaktayım. Acaba bunun bir çözümü var mıdır ?
OLE DB provider "MSDASQL" for linked server "MYSQL" returned message "[MySQL][ODBC 5.3(w) Driver]Optional feature not supported".
Msg 7391, Level 16, State 2, Procedure p_Ratings_Select, Line 14
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "MYSQL" was unable to begin a distributed transaction.
Insert sorgusunu yazar mısınız buraya
DECLARE @ID NVARCHAR(MAX),@Q NVARCHAR(MAX),@Q_FULL NVARCHAR(MAX)
SET @ID=(SELECT '/'+ STUFF((SELECT '/'+id+'/,' FROM ratings
FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)'),1,1,''))
SET @ID=REPLACE(@ID,'/','''')
SET @Q_FULL=N'SELECT id,time,user_id,internal_id,fullname,email,company,qualification,politeness,comment,ip,chat_id from db.ratings where id not in('+@ID+')'
SET @Q_FULL=REPLACE(@Q_FULL,''',)',''')')
INSERT INTO [dbo].[ratings]
([id]
,[time]
,[user_id]
,[internal_id]
,[fullname]
,[email]
,[company]
,[qualification]
,[politeness]
,[comment]
,[ip]
,[chat_id])
EXEC (@Q_FULL) at MYSQL
N'Select sorgusunda sorun vardır, insert edilen alan sayısı aynı where kısmını kontrol edin
Select Sorgusunu insert dışında kullandığım zaman sorunsuz bir şekilde select ediyor. Alan sayılarına baktığım zaman da aynı görünüyor. Çok ilginç
Where kısmındaki + + lı kısmı farklı bir şekilde kullanabilir misiniz, burası sorun çıkartıyor olabilir
komple where i kaldırarak denedim yine aynı hatayı alıyorum. sanırım mysql üzerinden bir ayar yapmam gerekiyor . araştırmaya devam ediyorum. Çözümünü bulursam burada bildireceğim .