Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
Jeśli w zapytaniu określono opcję BINARY BASE64, dane binarne są zwracane w formacie kodowania base64.
Jeśli opcja BINARY BASE64 nie jest określona w zapytaniu, domyślnie tryb AUTO obsługuje kodowanie adresów URL danych binarnych. Zwracane jest odwołanie do względnego adresu URL wirtualnego katalogu głównego bazy danych. To odwołanie dotyczy bazy danych, w której wykonano zapytanie. Zwrócone odwołanie może służyć do uzyskiwania dostępu do rzeczywistych danych binarnych w kolejnych operacjach. Ten dostęp jest uzyskiwany przy użyciu zapytania ISAPI dbobject SQLXML. Zapytanie musi podać wystarczającą ilość informacji, aby zidentyfikować obraz. Informacje takie mogą obejmować kolumny dotyczące klucza podstawowego.
Alias kolumny
Nie używaj aliasu dla kolumny binarnej podczas wykonywania zapytań dotyczących widoku i korzystania z trybu AUTO FOR XML. Jeśli używasz aliasu, alias jest zwracany w kodowaniu adresu URL danych binarnych. W kolejnych operacjach alias jest bez znaczenia. Nie można użyć aliasu bez znaczenia i kodowania adresu URL do pobrania obrazu.
Rzutowanie na obiekt BLOB
W zapytaniu SELECT rzutowanie dowolnej kolumny do dużego obiektu binarnego (BLOB) powoduje, że kolumna jest jednostką tymczasową. Będąc tymczasowym, obiekt BLOB traci skojarzoną nazwę tabeli i nazwę kolumny. To rzutowanie danych powoduje, że zapytania w trybie AUTO generują błąd, ponieważ system nie wie, gdzie umieścić tę wartość w hierarchii XML.
Rozważmy na przykład poniższą tabelę z jednym wierszem.
CREATE TABLE MyTable (Col1 int PRIMARY KEY, Col2 binary)
INSERT INTO MyTable VALUES (1, 0x7);
Następujące zapytanie generuje błąd, który jest spowodowany rzutowaniem do dużego obiektu binarnego (BLOB):
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO;
Rozwiązaniem jest dodanie opcji BINARY BASE64 do klauzuli FOR XML. Jeśli usuniesz rzutowanie, zapytanie daje dobre wyniki.
SELECT Col1,
CAST(Col2 as image) as Col2
FROM MyTable
FOR XML AUTO, BINARY BASE64;
Spodziewaj się następującego dobrego wyniku:
<MyTable Col1="1" Col2="Bw==" />