Jump to content

Tossi65

Newbie
  • Content Count

    15
  • Joined

  • Last visited

Everything posted by Tossi65

  1. Hallo Nils, das Problem ist folgendes: Die genannte Prozedur löst auf einer Datenbank beim Kunden in den USA folgenden Fehler aus: Msg 468, Level 16, State 9, Procedure getDeviceTypeFromSAPWithID, Line 47 Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation. Ich habe nach dem Fehler geforscht und richtig: Die Datenbank Collation und Tabellenspalten Collation weichen voneinander ab. Da wir die Datenbank erst dieses Jahr wirklich aktiv nutzen, ist das vorher nicht aufgefallen. Trotzdem sind schon Daten in der Datenbank, welche wir nicht verlieren dürfen. Also die Tabellenspalten lassen sich nachträglich nicht so einfach auf eine neue Collation umsetzen. Datenbank meckert. Aber laut Stack Overflow kann man das auch anders lösen: https://stackoverflow.com/questions/1607560/cannot-resolve-the-collation-conflict-between-sql-latin1-general-cp1-ci-as-and ALso wollte ich laut Anweisung vorgehen. Aber es scheint nicht zu gehen. Oder siehst Du eine andere Lösung. Danke Torsten
  2. Hallo Kollegen, ich habe die Aufgaben von meinem verstorbenen Kopllegen übernommen. Ich bin leider noch kein MS SQL Profi. Ich habe meine Ausbildung auf andere Datenbanken gemacht. Aber nun zum Thema. Eine StoreProcedur erzeugt oben genannten Fehler und das stimmt auch. Die Database defaut Collation ist SQL_Latin1_General_CP1_CI_AS benutz wurde in einigen Tabellen Latin1_General_CP1_CI_AS. Tja und nun auf einmal wird der obige Fehler bei gebrauch der Prozedur ausgelöst. Einen Workaround habe ich gefunden und würde diesen auch anwenden. Aber SQL ManagementStudio kann irgendwie die Zeilen nicht richtig Zählen. USE [DB] GO /****** Object: StoredProcedure [dbo].[getDeviceTypeFromSAPWithID] Script Date: 2/14/2020 11:44:58 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[getDeviceTypeFromSAPWithID] ( -- Add the parameters for the function here @myreturn smallint OUTPUT , @myreturntext varchar(255) output, @DeviceType_Bez varchar(64) output, @DeviceType_id smallint output, @SAPDeviceType_bez varchar(64), @SAPDeviceType_id smallint output, @MerkmalValues varchar(max), @TestSystemLocation_bez varchar(32) ) AS BEGIN DECLARE @l_cnt int, @l_cnt2 int, @l_cnt3 int, @l_cnttmp int, @l_TestSystemLocationDummy_bez varchar(32); SET @myreturn = 0 SET @myreturntext = N'NoError' BEGIN TRY -- SAPDeviceTypeID bestimmen SET @SAPDeviceType_id = (SELECT SAPDeviceType_id FROM p_SAPDeviceType WHERE SAPDeviceType_Bez = @SAPDeviceType_bez) -- Auftrennen der Zeichenkette mit den Bedingungen in Key/Value Paare nach #SplittedValues SELECT * INTO #SplittedValues FROM Split(';', @MerkmalValues) -- Hier knallt es -- Temporäre Tabelle für die Ergebnisse der einzelnen Vergleiche CREATE TABLE #tmpDeviceType ( sSAPDeviceType_bez varchar(64) , SAPDeviceType_id smallint , sDeviceType_bez varchar(64) , DeviceType_id smallint ) -- Selektieren von SAPDeviceType nach DeviceType Mappings welche den Key/Value Bedingungen entsprechen INSERT INTO #tmpDeviceType (sSAPDeviceType_bez, SAPDeviceType_id, sDeviceType_Bez, DeviceType_id) SELECT p_SAPDeviceType.SAPDeviceType_bez, p_SAPDeviceType.SAPDeviceType_id , p_DeviceType.DeviceType_bez, p_DeviceType.DeviceType_id FROM p_SAPDeviceType_Location INNER JOIN p_SAPDeviceType ON p_SAPDeviceType_Location.SAPDeviceType_id = p_SAPDeviceType.SAPDeviceType_id INNER JOIN p_DeviceType ON p_SAPDeviceType_location.DeviceType_id = p_DeviceType.DeviceType_id INNER JOIN p_TestSystemLocation on p_SAPDeviceType_Location.TestSystemLocation_id = p_TestSystemLocation.TestSystemLocation_id INNER JOIN p_SAPMerkmal on p_SAPDeviceType_Location.Merkmal_id = p_SAPMerkmal.merkmal_id INNER JOIN p_SAPMerkmalWert on p_SAPDeviceType_Location.Merkmalwert_id = p_SAPMerkmalWert.merkmalwert_id INNER JOIN #SplittedValues on p_SAPMerkmal.merkmal_bez = #SplittedValues.[key] AND p_SAPMerkmalWert.merkmalwert_bez = #SplittedValues.value WHERE p_TestSystemLocation.TestSystemLocation_bez collate database_default = @TestSystemLocation_bez AND p_SAPDeviceType.SAPDeviceType_bez collate database_default = @SAPDeviceType_bez AND p_SAPDeviceType_Location.[enabled] = 1 -- Wenn keine Einträge für TestSystemLocation gefunden, dann mit Default Location ID = 0 (MASTER - GER) probieren SET @l_cnttmp = (SELECT COUNT(*) FROM #tmpDeviceType) IF @l_cnttmp = 0 BEGIN SET @l_TestSystemLocationDummy_bez = (SELECT TestSystemLocation_bez FROM p_TestSystemLocation WHERE TestSystemLocation_id = 0) INSERT INTO #tmpDeviceType (SAPDeviceType_bez, SAPDeviceType_id, DeviceType_Bez, DeviceType_id) SELECT p_SAPDeviceType.SAPDeviceType_bez, p_SAPDeviceType.SAPDeviceType_id , p_DeviceType.DeviceType_bez, p_DeviceType.DeviceType_id FROM p_SAPDeviceType_Location INNER JOIN p_SAPDeviceType ON p_SAPDeviceType_Location.SAPDeviceType_id = p_SAPDeviceType.SAPDeviceType_id INNER JOIN p_DeviceType ON p_SAPDeviceType_location.DeviceType_id = p_DeviceType.DeviceType_id INNER JOIN p_TestSystemLocation on p_SAPDeviceType_Location.TestSystemLocation_id = p_TestSystemLocation.TestSystemLocation_id INNER JOIN p_SAPMerkmal on p_SAPDeviceType_Location.Merkmal_id = p_SAPMerkmal.merkmal_id INNER JOIN p_SAPMerkmalWert on p_SAPDeviceType_Location.Merkmalwert_id = p_SAPMerkmalWert.merkmalwert_id INNER JOIN #SplittedValues on p_SAPMerkmal.merkmal_bez = #SplittedValues.[key] AND p_SAPMerkmalWert.merkmalwert_bez = #SplittedValues.value WHERE p_TestSystemLocation.TestSystemLocation_bez = @l_TestSystemLocationDummy_bez AND p_SAPDeviceType.SAPDeviceType_bez = @SAPDeviceType_bez AND p_SAPDeviceType_Location.[enabled] = 1 END -- Anzahl der übergebenen Merkmalskombinationen bestimmen SET @l_cnt = (SELECT COUNT(*) FROM #SplittedValues) SELECT SAPDeviceType_bez, SAPDeviceType_id, DeviceType_bez, DeviceType_id, COUNT(*) AS [count] INTO #tmpCnt FROM #tmpDeviceType GROUP BY SAPDeviceType_bez, SAPDeviceType_id, DeviceType_bez, DeviceType_id SET @l_cnt2 = (SELECT MAX([count]) FROM #tmpCnt) IF @l_cnt2 < @l_cnt BEGIN SET @DeviceType_bez = '-' SET @DeviceType_id = -1 END ELSE BEGIN IF @l_cnt2 > @l_cnt BEGIN SET @DeviceType_Bez = '+' SET @DeviceType_id = -1 END ELSE BEGIN -- Es gibt zumindest einen DeviceTyp, der genau die angegebenen Bedingungen erfüllt SET @l_cnt3 = (SELECT COUNT(*) FROM #tmpCnt WHERE [count] = @l_cnt2) IF @l_cnt3 > 1 BEGIN SET @DeviceType_Bez = '+' SET @DeviceType_id = -1 END ELSE BEGIN SET @DeviceType_Bez = (SELECT DeviceType_Bez FROM #tmpCnt WHERE [count] = @l_cnt) SET @DeviceType_id = (SELECT DeviceType_id FROM #tmpCnt WHERE [count] = @l_cnt) END END END DROP TABLE #tmpDeviceType DROP TABLE #tmpCnt END TRY BEGIN CATCH SET @myreturn = (SELECT ERROR_NUMBER()) SET @myreturntext = (SELECT ERROR_MESSAGE()) END CATCH END GO Dort wo "--Hier knallt es" ist die besagte Stelle. Ich habe der temporären Tabelle bei den varchar Spalten ein "collate database_default" angefügt. Hat nichts gebracht. Das Selbe habe ich bei "where Feldname collate database_default= bla" gemacht. Auch kein Erfolg. Die Zeile mit dem Fehler bleibt und stehet immer noch zwischen den Anweisungen. Da ist mir folgendes aufgefallen: SELECT * INTO #SplittedValues FROM Split(';', @MerkmalValues) Markvalues wird per Eingansparameter übergeben in SplittedValues mit Split(...) aufgeteilt. OK! Aber was ist SplittedValues??? Ich habe keine Declaration einer temp. Tabelle gesehen?? Kann hier der Fehler passieren? Vielen Dank Torsten
  3. Guten Morgen wi-ra, diese Option habe ich vorgeschlagen, aber die Obrigkeit will das nicht. Dagegen konnte ich nicht argumentieren, Was meinst Du da arbeitet "jemand" mit / gegen?
  4. Guten Morgen wi-ra, das Problemm wird immer bizzarer. Die eine Replikation, welche vorher gestört war, ist nun grün und keine Fehler. Aber es werden keine Daten übermittelt. Bei sder 2. Replikation, welche einen Fehler mit einem schon vorhandenen Eintrag in einer Tabelle meldet, zeigt auf 2. Tabellen. Im Fehlertext vom Agenten steht Tabelle a. Werte ich die Transaktion mit dem Command ID aus, wird dort eine andere Tabelle genannt. Wie soll man da richtig vorgehen??? Mfg Torsten
  5. Hallo wir-ra, ich habe vollzugriff. Das neue betanken der Zieldatenbank ist nicht so einfach. Wie gesagt, dort laufen aus verschiedenen Standorte die Daten zusammen. Einfacher wäre es die Methode dem Bearbeiten der zu übertragenden Daten. Gibt es dazu keine Anleitung??
  6. Guten Morgen wi-ra, ich habe zugriff aus alle beteiligten Datenbanken. Ich komme auch auf allen Servern an die distribution Datenbank heran.
  7. Ja das hast du richtig verstanden. Die Resultate werden in einer Datenbank zusammengeführt. Die Tabellen sind überall gleich nur die Datenmenge ist durch where ... unterschiedlich und werden übertragen. Fakt ist das eine Tabelle der Meinung ist, das der neue Eintrag schon vorhanden ist. Jetzt möchte ich diesen Eintrag für diese Datenmenge ermitteln und aus den Commands deaktivieren. Wenn es geht?! ,
  8. Hallo wi-ra, da wir die Datenbanken von den Standorten zu uns replizieren, sind diese unterschiedlich groß. Im Schnit ca 200 bis 500 MB. Aber sie werden alle gemeinsam in eine Zieldatenbank repliziert und die hat schon ca 1,5 GB. Mich interessiert meht die distributio n DB. So wie ich es gelesen haben stehen dort die Commans drin. Wie und wo kann ich da eingreifen???? Die Beschreibung im Internet sind alle nicht so recht zielführend. Den Command über Transaction und CommandID zu identifizieren hat zu verschiedenen Ergenbnissen geführt. Als Ursache wurden 2 verschiedene Tabellen genannt. Mfg Torsten
  9. Hallo DerFrank, ich habe den Eintrag in der Tabelle gefunden, zielseitig. Leider kann ich diesen Eintrag nicht löschen, da er Abhängigkeiten zu anderen Einträgen hat. Mist. Wie und Wo kann ich den Befehl(Command) finden, damit ich diesen Inaktiv oder so setzen kann??? In MySQl setzt man einfach die Abarbeitung auf die nächste Sequenznummer(Step) Wie geht das bei MS SQL???? Noch komischer ist der Umstand, das in der Fehlermeldung einen andere Tabelle genannt wird als in dem betreffenden Command?? Alles etwas verwirrend, Aber es muss doch gehen. Die Kollegen sind schon sauer weil die Replikation seit Wochen nicht richtig läuft.
  10. Hallo MDD, wenn ich wüsste welchen Datensatz die Replikation in der Zieltabelle einfügen will, dann kann ich auch eingreifen. Der Key liegt bei der Tabelle auf dem Feld ID und diese Werte sind natürlich schon drin. Seit dem Jahr 2012! Microsoft scheint hier wieder einen nicht aussagekräftige Meldung auszugeben. Kann man die letzte übetragende ID der Quelle ermitteln??? Mdg Torsten
  11. Hallo DerFRank, das weiss ich auch. Aber wie löse ich das Problem wieder auf. Agenten neustart bringt nichts. Neuer Snapshot bringt auch nichts. Ich habe verschiedene Szenarien durch aber ohne erfolg. Wie bekomme ich den vermeindlichen Datensatz heraus????
  12. Hallo Leute, wieder ein neues Problem. Wir setzen Replikationein, um Daten aus ausgelagerte Datenbanken in einer zentralen Datenbank zusammn zu führen. Eine davon geht nicht mehr. Es kommt folgende Fehlermeldung: Ich habe schon ddas Internet gequält, aber bin nicht weitergekommen. Kennt jemand sich damit aus? Mfg Torsten
  13. Hallo Dukel, danke für die schnelle Antwort. Aber ich verstehe das nicht ganz: -- Pivot table with one row and five columns SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, [0], [1], [2], [3], [4] FROM (SELECT DaysToManufacture, StandardCost FROM Production.Product) AS SourceTable PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ([0], [1], [2], [3], [4]) ) AS PivotTable; Das Beispiel ist kalr, aber ich weiß nicht die genaue Anzahl der Spalten. Diese variieren je nach Ergebnis der Query. Ich habe mal das Ergebnis als Bild angehängt. Die Spalter strName und strWert sollen gedreht ausgegeben werden, da diese als Grundlage für einen Report sind. Mfg Torsten
  14. Hallo Leute, ich brauch euer Hilfe. Ich habe eine View, die mir die Daten wie folgt ausgibt: strName strWert spalte1 1 spalte2 2 spalte3 3 spalte4 4 spalte5 5 Wie bekomme ich es hin, dass die Spalten strName und strWert quer ausgegeben werden? Also im strName steht der Spaltenname und in strWert der Spaltenwert. Gibt es etwas dafür????? spalte1 spalte2 spalte3 spalte4 spalte5 1 2 3 4 5 Vielen Dank Torsten
×
×
  • Create New...