Rozwiązywanie problemów z opracowywaniem dotyczących funkcji aplikacji Application Lifecycle Management w pakiecie Visual Studio

Rozwiązywanie problemów z analizą kodu

Ten temat zawiera informacje na temat rozwiązywania następujących problemów z analizą kodu w pakiecie Visual Studio.

Zmiany w zestawie reguł pakietu Visual Studio 2010 nie są uwzględniane we wcześniejszych wersjach oprogramowania Visual Studio


W przypadku utworzenia w pakiecie Visual Studio 2010 zestawu reguł zawierającego podrzędny zestaw reguł zmiana zestawu podrzędnego może nie zostać zastosowana podczas analizy kodu uruchomionej na komputerach z wcześniejszymi wersjami pakietu Visual Studio. Aby rozwiązać ten problem, należy zastąpić nadrzędny zestaw reguł zawierający podrzędny zestaw reguł.

  1. Otwórz nadrzędny zestaw reguł w pakiecie Visual Studio 2010.
  2. Wprowadź zmianę, taką jak dodanie lub usunięcie reguły, a następnie zapisz zestaw reguł.
  3. Ponownie otwórz zestaw reguł, wycofaj wprowadzoną zmianę, a następnie jeszcze raz zapisz zestaw reguł.

Rozwiązywanie problemów z pomiarami kodu

Podczas gromadzenia wyników pomiarów kodu mogą wystąpić następujące problemy:

Zmiany w obliczeniach złożoności kodu w pakiecie Visual Studio 2010


Pomiary złożoności kodu obliczone dla tej samej funkcji w pakiecie Visual Studio 2010 mogą się różnić od pomiarów przeprowadzonych we wcześniejszych wersjach pakietu Visual Studio w przypadku następujących sytuacji:

  • Funkcja zawiera co najmniej jeden blok „catch”. We wcześniejszych wersjach pakietu Visual Studio bloki „catch” nie były uwzględniane podczas obliczeń. W przypadku pakietu Visual Studio 2010 złożoność bloku „catch” jest dodawana do złożoności funkcji.
  • Funkcja zawiera instrukcję switch (Select Case w języku VB). Różnice między kompilatorami w pakiecie Visual Studio 2010 i wcześniejszych wersjach mogą powodować generowanie odmiennego kodu MSIL w przypadku określonych instrukcji switch zawierających przypadki „fall-through”.

Rozwiązywanie problemów z porównywaniem danych

Podczas porównywania danych w dwóch bazach danych mogą wystąpić następujące problemy.

Brak tabel w liście tabel do porównania


Tabele i widoki są wyświetlane na liście tabel do porównania tylko wtedy, gdy zostały spełnione następujące warunki:

  • Tabele mają zgodne nazwy kolumn zawierających odpowiednie typy danych.

W nazwach tabel, widoków i właścicieli rozróżniana jest wielkość liter. Więcej informacji na temat schematów można znaleźć w temacie Porównywanie i synchronizowanie schematów baz danych (j.ang.).

  • Tabele mają taki sam klucz podstawowy, unikatowy indeks lub unikatowe ograniczenie.
  • Widoki mają taki sam unikatowy, klastrowany indeks.
  • Tabelę można porównać z widokiem tylko wtedy, gdy mają one takie same nazwy i definicje schematów.

Różnice w typach sql_variant


Jeśli wartości w kolumnach są takie same, należy sprawdzić skrypt aktualizacji danych w celu określenia różnic metadanych dla typów sql_variant. Lista Different Records (Różne rekordy) nie odzwierciedla różnic tego rodzaju.

Podczas porównywania danych w japońskim formacie Unicode występują błędy


W przypadku bazy danych SQL Server lub należących do niej kolumn tabeli można określić metodę sortowania. Mimo to w przypadku próby porównania danych korzystających z metod sortowania Japanese_Unicode_Qualifier w oknie Error List (Lista błędów) wyświetlany jest komunikat „Locale is not supported” (Nieobsługiwane ustawienia regionalne). Kwalifikator może mieć wartość BIN, CS, CI lub CS_AS_KS_WS. Takie metody sortowania są obsługiwane przez program SQL Server, ale nie przez platformę .NET Framework.

Uwaga
Aby rozwiązać ten problem, można zmienić metodę sortowania bazy danych lub kolumn z Japanese_Unicode_Qualifier na Japanese_Qualifier, gdzie wartość kwalifikatora jest taka sama. Informacje na temat sposobu zmiany metody sortowania bazy danych można znaleźć w temacie Ustawianie i zmiana metody sortowania serwera (j.ang.) w witrynie firmy Microsoft w sieci Web. Aby zmienić sortowanie kolumn, można zmodyfikować definicję tabeli, jeśli do danej kolumny nie prowadzą odniesienia z obliczonej kolumny, indeksu, statystyk dystrybucji albo ograniczenia sprawdzania lub klucza obcego.

Rozwiązywanie problemów z generowaniem danych

Podczas pracy z planami generowania danych mogą wystąpić następujące problemy:

Generowanie danych kończy się niepowodzeniem w przypadku naruszenia ograniczeń sprawdzania


W przypadku generowania danych dla kolumny z ograniczeniem sprawdzania operacja kończy się niepowodzeniem, jeśli wygenerowane dane naruszają to ograniczenie. Przed uruchomieniem planu za pomocą okna Data Generation Preview (Podgląd generowania danych) można sprawdzić, czy dane naruszają ograniczenie. Więcej informacji można znaleźć w temacie Jak to zrobić: Podgląd planu generowania danych (j.ang.).

Aby rozwiązać ten problem, należy użyć jednej z następujących metod:

Nie można przypisać generatora danych wyrażeń regularnych do kolumn definiowanych przez użytkownika


Podczas próby przypisania generatora danych do kolumny z unikatowym ograniczeniem lista dostępnych generatorów zawiera wyłącznie generatory, które mogą podawać unikatowe wartości. Generator wyrażeń regularnych nie zapewnia unikatowych wartości, zatem nie można go użyć do wypełnienia kolumny o typie zdefiniowanym przez użytkownika, która ma przypisane unikatowe ograniczenie.

W celu wygenerowania danych dla kolumny o typie zdefiniowanym przez użytkownika z przypisanym unikatowym ograniczeniem należy użyć generatora powiązanego z danymi lub niestandardowego generatora danych. Więcej informacji można znaleźć w tematach Generator powiązany z danymi (j.ang.) i Generowanie specjalistycznych danych testowych za pomocą niestandardowego generatora danych (j.ang.).

Nie można wygenerować danych dla tabel z wyzwalaczami usuwania


Niektóre tabele zawierają wyzwalacze, które uniemożliwiają usuwanie wierszy. W przypadku próby usunięcia wierszy z takiej tabeli wyzwalacz powoduje wycofanie operacji usunięcia. Zwykły sposób generowania danych jest niedostępny dla takich tabel lub tabel zawierających odwołania do nich. Na przykład nie można w zwykły sposób wygenerować danych dla tabeli Employee w bazie danych AdventureWorks.

Aby wygenerować dane dla takiej tabeli, należy użyć jednej z następujących metod:

  • Wyłączenie lub usunięcie wyzwalacza, uruchomienie planu generowania danych, a następnie ponowne włączenie lub dodanie wyzwalacza.
  • Uruchomienie planu generowania danych. Po wyświetleniu monitu o wyczyszczenie zawartości tabel przed wstawieniem nowych wierszy kliknij przycisk Nie. Ta metoda może mieć nieprzewidziane skutki, a unikatowe ograniczenie w którejkolwiek z kolumn może powodować błędy.

Problemy z generatorami powiązanymi z danymi


Jeśli generowanie danych nie powiodło się w przypadku co najmniej jednej kolumny, dla której określono generator powiązany z danymi, kolumna Generator Output (Dane wyjściowe generatora) w oknie Column Details (Szczegóły kolumny) zawiera tekst „No output” (Brak danych wyjściowych) lub „No Coercible Output” (Brak zgodnych danych wyjściowych). W sekcjach poniżej opisano przyczyny takich błędów generowania danych.

Brak danych wyjściowych

Jeśli kolumna Generator Output zawiera tekst „No Output”, instrukcja SELECT określona we właściwości Select Query (Kwerenda wybierająca) jest prawdopodobnie niepoprawna. Instrukcja SELECT może być niewidoczna w oknie właściwości, zatem warto skopiować ją i wkleić w edytorze Transact-SQL w celu sprawdzenia jej poprawności.

Brak zgodnych danych wyjściowych

Jeśli w kolumnie Generator Output wyświetlany jest tekst „No Coercible Output”, typu danych zwracanego przez instrukcję SELECT nie można uzgodnić z typem danych kolumny, dla której dane są generowane. Na przykład w przypadku generowania danych dla kolumny typu INT następująca instrukcja SELECT spowodowałaby wyświetlenie tekstu „No Coercible Output”:

SELECT RAND() * (column1 - column2) AS Column1 FROM Table1

Aby instrukcja SELECT zwracała dane możliwe do uzgodnienia z typem INT, należy ją zaktualizować w następujący sposób:

SELECT CAST(RAND() * (column1 - column2) AS INT) AS Column1 FROM Table1

Nie można wygenerować danych dla kolumn SPARSE


Podczas próby wygenerowania danych dla tabeli zawierającej co najmniej jedną kolumnę SPARSE i zestaw COLUMN_SET mogą wystąpić następujące błędy: „"„Data generation failed because of the following exception: The given ColumnMapping does not match up with any column in the source or destination” (Generowanie danych nie powiodło się z powodu następującego wyjątku: podane mapowanie ColumnMapping nie jest zgodne z żadną kolumną źródłową lub docelową).

Ten błąd może na przykład wystąpić podczas próby wygenerowania danych dla następującej tabeli:

CREATE TABLE [dbo].[SparseTable]
(
ID INT PRIMARY KEY,
C1 varchar(20) SPARSE NULL, 
C2 smallint SPARSE NULL,
C3 varchar(20) SPARSE NULL,
SpecialPurposeColumns XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
)

Aby wygenerować dane dla tabeli zawierającej kolumny SPARSE i zestaw COLUMN_SET, należy zmienić preferowaną metodę wstawiania danych na SqlV1CompatibilitySink lub użyć niestandardowego generatora danych.

W przypadku zastosowania metody SqlV1CompatibilitySink generowanie danych dla dużych tabel może być powolne.

Więcej informacji na temat sposobu zmiany preferowanej metody wstawiania danych można znaleźć w temacie Jak to zrobić: określanie wartości domyślnych i opcji generatorów danych (j.ang.). Więcej informacji na temat sposobu tworzenia i wdrażania niestandardowego generatora danych można znaleźć w temacie Generowanie specjalistycznych danych testowych za pomocą niestandardowego generatora danych (j.ang.).

Rozwiązywanie problemów z projektowaniem, tworzeniem i wdrażaniem baz danych

Błędy w obiektach bazy danych


Gdy obiekt bazy danych zawiera co najmniej jeden błąd składni, w oknie Error List wyświetlane są powiązane komunikaty o błędach.

Uwaga
Komunikat o błędzie wyświetlany w oknie Error List powinien zawierać informacje na temat sposobu rozwiązania problemu. Po wyeliminowaniu błędu i zapisaniu obiektu bazy danych przywracana jest typowa ikona tego obiektu, a błąd jest usuwany z okna Error List.

Używanie nowych słów zarezerwowanych w programie Microsoft SQL Server 2005


W programie SQL Server 2005 obowiązują następujące nowe słowa zarezerwowane: EXTERNAL, PIVOT, REVERT, TABLESAMPLE oraz UNPIVOT. Jeśli zarezerwowane słowa kluczowe są używane jako nazwy obiektów schematu w projekcie bazy danych programów Microsoft SQL Server 2005 lub SQL Server 2008, w oknie Output (Dane wyjściowe) wyświetlany jest błąd.

Uwaga
Aby obejść to ograniczenie, można wprowadzić nazwy obiektów schematu w cudzysłowach. Na przykład można użyć instrukcji "CREATE TABLE [External] (c1 INT)".

Różnice dotyczące kompilacji w wierszu polecenia


W przypadku kompilacji w wierszu polecenia, gdy projekt jest otwarty w programie Visual Studio, błędy wskazywane podczas kompilacji za pomocą interfejsu użytkownika mogą nie być wyświetlane.

Uwaga
Aby obejść ten problem, należy zamknąć projekt bazy danych w programie Visual Studio przed rozpoczęciem kompilacji w wierszu polecenia.

Zależności i skrypty aktualizacji


W celu wygenerowania poprawnej kolejności obiektów w skrypcie aktualizacji funkcja porównywania schematów sprawdza zależności między obiektami. Jeśli na przykład widok zależy od tabeli, musi ona zostać utworzona jako pierwsza. Jeśli obiekt, który zależy od innego obiektu, nie ma nazwy zgodnej z kwalifikowanym schematem, zależność może nie zostać zidentyfikowana, a skrypt aktualizacji lub tworzenia może zawierać instrukcje w nieprawidłowej kolejności. Ta różnica może powodować problemy podczas aktualizacji obiektu docelowego w celu dostosowania go do źródła lub wdrożenia zmian w bazie danych. Problem ten dotyczy także skryptów kompilacji baz danych.

Uwaga
Aby obejść ten problem, należy nadać obiektom wchodzącym w relacje zależności nazwy zgodne z kwalifikowanym schematem. W pakietach Visual Studio Premium oraz Visual Studio Ultimate można użyć do tego celu funkcji refaktoryzacji bazy danych. Więcej informacji można znaleźć w temacie W pełni kwalifikowane nazwy obiektów bazy danych (j.ang.). W przykładzie poniżej można zapewnić poprawne określenie zależności, zmieniając końcową część instrukcji z KeysTable na [dbo].[KeysTable]:

 

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

Identyfikatory cytowane mogą powodować problemy z ponownym wczytywaniem projektów


Zapisanie obiektów lub wczytanie baz danych, które zawierają identyfikatory cytowane, gdy pole wyboru SET QUOTED_IDENTIFIER we właściwościach bazy danych jest niezaznaczone, powoduje problemy. Taka sytuacja może wystąpić po zaimportowaniu schematu z bazy danych, która zawierała identyfikatory cytowane.

Uwaga
Ten problem można obejść na dwa sposoby. Pierwszy polega na zmodyfikowaniu definicji obiektów w celu wprowadzenia nawiasów kwadratowych zamiast znaków cudzysłowu. Na przykład ciąg "Moja tabela" można zastąpić identyfikatorem [Moja tabela]. Alternatywnie można kliknąć element DatabaseProjectProperties w menu Project, a następnie kliknąć kartę Database Properties (Właściwości bazy danych) i zaznaczyć pole wyboru SET QUOTED_IDENTIFIER.

Wewnętrzny stan bazy danych jest niespójny z jej zawartością


Podczas pracy w programie Visual Studio Premium może zostać wyświetlony następujący błąd: „The internal state of the database project is inconsistent with its contents. Unload the project and then reload it to resolve the issue” (Wewnętrzny stan projektu bazy danych jest niespójny z jej zawartością. Aby rozwiązać problem, zamknij projekt i wczytaj go ponownie). Ten komunikat oznacza, że projekt, w którym przechowywana jest lista uwzględnionych plików, nie jest zsynchronizowany ze stanem plików. Najczęstszą przyczyną występowania tego błędu jest usunięcie jednego z plików projektu z dysku, gdy projekt bazy danych nie był otwarty. Błąd może być także spowodowany problemami podczas importowania schematu bazy danych.

Uwaga
Aby obejść ten problem, należy kliknąć polecenie Synchronize (Synchronizuj) na pasku narzędzi Schema View (Widok schematu). Jeśli ten sposób nie zadziała, można zamknąć i ponownie wczytać projekt bazy danych. W tym celu należy kliknąć projekt w oknie Solution Explorer (Eksplorator rozwiązań), otworzyć menu Project, a następnie kliknąć polecenie Unload Project (Zamknij projekt). Po zamknięciu projektu wystarczy otworzyć menu Project i kliknąć polecenie Reload Project (Wczytaj ponownie projekt).

Wycofywanie oczekujących zmian


Widok schematu nie jest automatycznie odświeżany po użyciu polecenia Undo Pending Changes (Cofnij oczekujące zmiany) w systemie kontroli wersji. Na przykład po zmianie nazwy tabeli lub kolumny i cofnięciu tych zmian w widoku schematu wyświetlany jest komunikat „External file change, resynchronization required…” (Zewnętrzna zmiana pliku, wymagana ponowna synchronizacja...).

Uwaga
Aby obejść ten problem, należy kliknąć polecenie Synchronize na pasku narzędzi Schema View.

Nie znaleziono użytkownika lub grupy systemu Windows NT


Jeśli projekt bazy danych zawiera odwołanie do identyfikatora logowania, który jest niedostępny, wyświetlany jest następujący komunikat o błędzie: „Windows NT user or group 'DomainName\LoginName' not found. Check the name again” (Nie znaleziono użytkownika lub grupy NazwaDomeny\IdentyfikatorLogowania systemu Windows NT. Sprawdź ponownie nazwę). Ten problem może wystąpić podczas pracy na komputerze w domenie innej niż baza danych, której schemat został zaimportowany. Taka sytuacja zwykle ma miejsce w przypadku pracy w domu nad projektem bazy danych utworzonym w innym miejscu. Takim przypadku nie można skompilować ani wdrożyć projektu bazy danych.

Uwaga
Problem ten można rozwiązać, tworząc użytkownika z pominięciem klauzuli FOR LOGIN. Na przykład można zastosować następującą instrukcję: CREATE USER [Domena\Identyfikator]. Użytkownik zostanie utworzony podczas wdrażania projektu bazy danych, a następnie zostanie powiązany z identyfikatorem [Domena\Identyfikator], jednak w projekcie bazy danych nie trzeba będzie odwoływać się do tego identyfikatora.

Zduplikowane nazwy obiektów i wykluczone pliki


Jeśli w projekcie bazy danych występują duplikaty nazw obiektów (na przykład dwie tabele o nazwie Orders — Zamówienia), w oknie Error List będzie wyświetlany błąd. Nawet jeśli problem zostanie rozwiązany poprzez wykluczenie pliku zawierającego definicję jednego z obiektów, komunikat o błędzie nie zniknie natychmiast.

Uwaga
Aby obejść ten problem, można kliknąć polecenie Refresh (Odśwież) lub zmodyfikować plik zawierający definicję obiektu, zmienić nazwę obiektu i zapisać plik.

Kwalifikowane nazwy zgodne z bazą danych i serwerem


Podczas tworzenia obiektu w programie Visual Studio Premium jego nazwa jest nadawana zgodnie z konwencją [schemat].[obiekt].[element podrzędny]. Aby odwołać się do obiektu w innej bazie danych lub na innym serwerze, można uwzględnić nazwę bazy danych i serwer w następujący sposób: [serwer].[baza danych].[schemat].[obiekt].[element podrzędny]. W przypadku utworzenia procedury przechowywanej lub widoku, które odwołują się do obiektu wymagającego kwalifikowanej nazwy zgodnej z bazą danych lub serwerem, wyświetlane jest ostrzeżenie.

Uwaga
Aby wyeliminować to ostrzeżenie, należy zdefiniować odwołanie między bazami danych. Więcej informacji na temat odwołań między bazami danych można znaleźć w tematach Używanie odwołań w projektach bazy danych (j.ang.) oraz Jak to zrobić: Dodawanie odwołań do projektów bazy danych (j.ang.).
Ważne
Wdrożenie nie powiedzie się, jeśli projekt zawiera nierozwiązane ostrzeżenia o kwalifikowanych nazwach zgodnych z bazą danych lub serwerem, a użytkownik zaznaczył pole wyboru Treat warnings as errors (Traktuj ostrzeżenia jako błędy) na karcie Build (Kompilacja) we właściwościach projektu bazy danych. Niepowodzenie jest spowodowane ostrzeżeniami generowanymi przez kwalifikowane nazwy zgodne z bazą danych lub serwerem. Jeśli używane są kwalifikowane nazwy zgodne z bazą danych lub serwerem, należy usunąć zaznaczenie pola wyboru Treat warnings as errors.

Wydajność importowania schematu bazy danych


W przypadku importowania schematu bazy danych, gdy otwarte jest okno Test List Editor (Edytor listy testów) lub Test View (Widok testowania), ukończenie operacji importowania trwa znacznie dłużej. Spowolnienie występuje zarówno w kreatorze nowego projektu bazy danych (jeśli wybrano importowanie schematu bazy danych), jak i podczas operacji importowania schematu bazy danych. Problem występuje nawet wtedy, gdy okna Test List Editor i Test View zostały zamknięte przed zaimportowaniem bazy danych.

Uwaga
Aby obejść ten problem, należy zamknąć okna Test List Editor i Test View, zamknąć i ponownie uruchomić pakiet Visual Studio, a następnie zaimportować schemat bazy danych. Przy mniejszych schematach wykonanie tych czynności może nie być konieczne. W przypadku przykładowej bazy danych AdventureWorks operacja importowania schematu trwała 27 sekund bez otwartego okna Test List Editor i 48 sekund przy otwartym oknie.

Nawigacja po błędach kompilacji


Jeśli wdrożenie nie powiedzie się, błędu nie można poprawić poprzez aktualizację wygenerowanego skryptu kompilacji. W zamian należy skorygować plik źródłowy używany do wygenerowania tego skryptu. Po dwukrotnym kliknięciu błędu wdrażania w oknie Error List w edytorze wyświetlany jest wiersz skryptu kompilacji, który spowodował błąd.

Uwaga
Aby obejść ten problem, należy wyświetlić skrypt kompilacji w celu określenia przyczyny błędu, a następnie trzeba zmodyfikować plik źródłowy projektu bazy danych zawierający błąd. Na przykład jeśli skrypt powdrożeniowy Script.PostDeployment.sql zawiera błąd, należy zmodyfikować właśnie ten plik, a nie skrypt kompilacji.

Błędy składni podczas używania odwołań między bazami danych


Podczas zapisywania definicji obiektu zawierającej odwołanie do obiektu w innej bazie danych może zostać wyświetlony jeden lub wiele błędów składni. Na przykład można dodać odwołanie do projektu bazy danych, zdefiniować zmienne o nazwach RefServer i RefDatabase, a następnie przypisać do nich wartości. Dzięki temu widok można zdefiniować w następujący sposób:

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM $(RefServer).$(RefDatabase).dbo.TableName

Podczas zapisywania tej definicji może zostać wyświetlony jeden lub więcej komunikatów o błędach wskazujących na niepoprawną składnię. Komunikaty o błędach mogą odnosić się do nazwy bazy danych sprawdzania poprawności podczas projektowania, co może wprowadzać w błąd.

Uwaga
Aby rozwiązać ten problem, należy umieścić nazwy zmiennych w nawiasach. Omawiany przykład można skorygować w następujący sposób:

 

CREATE VIEW [dbo].[MyView]
AS
SELECT * FROM [$(RefServer)].[$(RefDatabase)].dbo.TableName

Zmiana nazw projektów i zestawów SQLCLR


Jeśli zostanie zmieniona nazwa projektu bazy danych zawierającego odwołanie do projektu lub zestawu SQLCR, ale odwołanie nie zostanie zaktualizowane, wdrożenie projektu bazy danych może być niemożliwe.

Uwaga
Aby rozwiązać ten problem, należy usunąć starsze odwołanie, a następnie dodać do projektu lub zestawu SQLCR nowe odwołanie o zaktualizowanej nazwie.

Nieobsługiwana składnia instrukcji FULLTEXT STOPLIST


Pakiet Visual Studio Premium nie umożliwia modelowania składni FROM { [DatabaseName.] SourceStoplistName } | SYSTEM STOPLIST ] dla instrukcji CREATE FULLTEXT STOPLIST. W przypadku zaimportowania skryptu używającego takiej składni jest ona ignorowana.

Uwaga
Aby rozwiązać ten problem, należy ręcznie dodać słowa stopu o skryptu powdrożeniowego. Więcej informacji można znaleźć w temacie Jak to zrobić: określanie skryptów przed- i powdrożeniowych (j.ang.).

Klauzula SORT_IN_TEMPDB nie jest importowana


W pakiecie Visual Studio Premium nie można zaimportować klauzuli SORT_IN_TEMPDB w indeksach. Oto przykładowy kod:

CREATE TABLE [dbo].[IndexTable]
{
[Column1] [INT] NOT NULL
}
GO
CREATE NONCLUSTERED INDEX [SortInTempDbOn] ON [dbo].[IndexTable]
{
[Column1] ASC
} 
WITH (SORT_IN_TEMPDB = ON)
GO

Indeks jest importowany bez klauzuli SORT_IN_TEMPDB.

Uwaga
Aby rozwiązać ten problem, należy ręcznie poprawić definicję indeksu przed każdą operacją importowania zmian z bazy danych do projektu.

Identyfikatory cytowane tracą stan podczas importowania funkcji z wartościami przechowywanymi w tabeli zawierających wiele instrukcji


Funkcje z wartościami przechowywanymi w tabeli zawierające wiele instrukcji można importować, ale stan ciągu identyfikatora cytowanego nie jest zapisywany w programie SQL Server. Podczas importowania tych funkcji mogą być wyświetlane błędy spowodowane ustawieniem domyślnym ON identyfikatorów cytowanych.

Uwaga
Aby rozwiązać ten problem, należy zmienić ustawienie identyfikatorów cytowanych dla jakichkolwiek funkcji z wartościami przechowywanymi w tabeli zawierających wiele instrukcji po zaimportowaniu obiektów i ustawień lub po zapisaniu aktualizacji bazy danych w projekcie.

Niektóre błędy projektu nie są usuwane po ponownej kompilacji


Niektóre błędy, które mogą występować w projekcie bazy danych, mogą nie być usuwane po usunięciu przyczyny nawet w przypadku ponownej kompilacji projektu. Na przykład jeśli plik .sqlpermissions, który stanowi odwołanie projektu ze względu na użycie Eksploratora Windows, zostanie usunięty, błąd występuje zgodnie z oczekiwaniami. W przypadku użycia Eksploratora rozwiązań celu usunięcia pliku z projektu i ponownej kompilacji błąd pozostaje nawet mimo usunięcia jego przyczyny.

Uwaga
Aby rozwiązać ten problem, należy kliknąć przycisk Reanalyze Project (Ponowna analiza projektu) na pasku narzędzi w Eksploratorze rozwiązań.

Rozwiązywanie problemów z testami jednostkowymi bazy danych

Podczas przeprowadzania testów jednostkowych bazy danych mogą występować problemy opisane w tym temacie.

Niewystarczające uprawnienia podczas przeprowadzania testów jednostkowych lub generowania danych testowych


Test jednostkowy można skonfigurować w celu automatycznego wdrożenia bazy danych i wygenerowania danych. W przypadku braku odpowiednich uprawnień do wygenerowania danych w docelowej bazie danych może zostać wyświetlony komunikat o błędzie dotyczącym braku uprawnień do połączenia z bazą danych.

Uwaga
Aby obejść ten problem, należy ręcznie uruchomić plan generowania danych. Jeśli uprawnienia do generowania danych są niewystarczające, takie podejście umożliwi wyświetlenie bardziej precyzyjnego komunikatu, który pozwoli wyeliminować błąd.

Zmiany testów jednostkowych i pliku App.Config są ignorowane podczas przeprowadzania testów jednostkowych


W przypadku zmodyfikowania pliku App.Config w projekcie testowym należy ponownie skompilować projekt testowy przed wprowadzeniem zmian. Dotyczy to między innymi zmian wprowadzonych w pliku App.Config za pomocą okna dialogowego Project Configuration (Konfiguracja projektu). Jeśli projekt testowy nie zostanie ponownie skompilowany, zmiany nie zostaną zastosowane podczas przeprowadzania testów jednostkowych.

Wdrożenie bazy danych w nieoczekiwanym elemencie docelowym podczas przeprowadzania testów jednostkowych


W przypadku wdrażania bazy danych podczas przeprowadzania testów jednostkowych baza danych jest tworzona na podstawie informacji o ciągu połączenia określonych w konfiguracji testów. Informacje o połączeniu określone we właściwościach kompilacji projektu bazy danych nie są używane do tego zadania, zatem można przeprowadzić różne testy jednostkowe odmiennych wystąpień tej samej bazy danych.

Przekroczony limit czasu podczas przeprowadzania testów jednostkowych


Jeśli testy jednostkowe bazy danych kończą się niepowodzeniem z powodu przekroczenia limitu czasu, okres ten można wydłużyć, aktualizując plik app.config w projekcie bazy danych. Limit czasu w ciągu połączenia definiuje okres oczekiwania na połączenie testu jednostkowego z serwerem. Limit czasu polecenia definiuje czas oczekiwania na wykonanie skryptu Transact-SQL w ramach testu jednostkowego.

Uwaga
Aby obejść ten problem, należy określić większą wartość atrybutu CommandTimeout w odpowiednim elemencie Context w pliku app.config należącym do projektu testowego. Na przykład aby określić limit czasu wynoszący 120 sekund dla elementu PrivilegedContext, trzeba zaktualizować plik app.config w następujący sposób:

 

<DatabaseUnitTesting>
    <DatabaseDeployment DatabaseProjectFileName="test.dbproj" Configuration="Debug" />
    <DataGeneration DataGenerationFileName="test.dgen" ClearDatabase="true" />
    <ExecutionContext Provider="System.Data.SqlClient" ConnectionString="another connection string" />
    <PrivilegedContext Provider="System.Data.SqlClient" ConnectionString="test" CommandTimeout=”120” />
</DatabaseUnitTesting>

Rozwiązywanie problemów z narzędziami do profilowania

Podczas korzystania z narzędzi do profilowania mogą występować następujące problemy.

Dane nie są zbierane przez narzędzia do profilowania


PO przeprowadzeniu profilowania aplikacji plik danych profilowania (.vsp) nie jest tworzony, a w oknie Output lub oknie polecenia wyświetlane jest następujące ostrzeżenie:

PRF0025: No data was collected. (PRF0025: Nie zebrano żadnych danych).

Problem ten może mieć kilka przyczyn:

  • Proces profilowany za pomocą próbkowania lub metody pamięci platformy .NET wywołuje proces podrzędny, który staje się procesem obsługującym aplikację. Na przykład niektóre aplikacje odczytują dane wiersza polecenia w celu określenia, czy zostały uruchomione jako aplikacje systemu Windows, czy też programy wiersza polecenia. Jeśli zażądano aplikacji systemu Windows, oryginalny proces uruchamia nowy proces skonfigurowany jako aplikacja systemu Windows, a następnie kończy działanie. Narzędzia do profilowania nie zbierają automatycznie danych procesów podrzędnych, zatem dane nie są gromadzone.

Aby zebrać dane profilowania w takiej sytuacji, należy dołączyć program profilujący do procesu podrzędnego i nie uruchamiać aplikacji wraz z programem profilującym. Więcej informacji można znaleźć w tematach Jak to zrobić: Dołączanie programu profilującego i odłączanie go od uruchomionych procesów (j.ang.) oraz Dołączanie (VSPerfCmd) (j.ang.).

Widoki i raporty dotyczące wydajności zawierają liczby zamiast nazw funkcji


Po przeprowadzeniu profilowania aplikacji w raportach i widokach wyświetlane są liczby zamiast nazw funkcji.

Problem ten jest spowodowany brakiem możliwości znalezienia przez aparat analityczny narzędzi do profilowania plików .pdb, które zawierają informacje o symbolach odwzorowujące informacje o kodzie źródłowym, nazwy funkcji i numery wierszy w skompilowanym pliku. Domyślnie kompilator tworzy plik .pdb po skompilowaniu pliku aplikacji. Odwołanie do lokalnego katalogu z plikiem .pdb jest przechowywane w skompilowanej aplikacji. Aparat analityczny wyszukuje plik .pdb w katalogu odwołania, a następnie w pliku, który aktualnie zawiera plik aplikacji. Jeśli nie można znaleźć pliku .pdb, aparat analityczny używa przesunięć funkcji zamiast ich nazw.

Ten problem można rozwiązać na dwa sposoby:

Uwaga
Aparat analityczny wymaga, aby plik .pdb miał taką samą wersję, jak skompilowany plik aplikacji. Plik .pdb pochodzący z wcześniejszej lub późniejszej kompilacji nie będzie działał.

Rozwiązywanie problemów z refaktoryzacją

Podczas refaktoryzacji obiektów bazy danych mogą występować następujące problemy.

Brak znanych problemów

Obecnie nie ma znanych problemów, które mogą wymagać rozwiązania.

Rozwiązywanie problemów z porównywaniem schematów

Podczas porównywania schematów dwóch baz danych mogą wystąpić następujące problemy.

Zależności i skrypty aktualizacji


W celu wygenerowania poprawnej kolejności obiektów w skrypcie aktualizacji funkcja porównywania schematów sprawdza zależności między obiektami. Jeśli na przykład widok zależy od tabeli, musi ona zostać utworzona jako pierwsza. Jeśli obiekt, który zależy od innego obiektu, nie ma nazwy zgodnej z kwalifikowanym schematem, zależność może nie zostać zidentyfikowana, a skrypt aktualizacji lub tworzenia może zawierać instrukcje w nieprawidłowej kolejności. Ta różnica może powodować problemy podczas aktualizacji obiektu docelowego w celu dostosowania go do źródła lub wdrożenia zmian w bazie danych. Problem ten dotyczy także skryptów kompilacji baz danych.

Uwaga
Aby obejść ten problem, należy nadać obiektom wchodzącym w relacje zależności nazwy zgodne z kwalifikowanym schematem. W przykładzie poniżej można zapewnić poprawne określenie zależności, zmieniając końcową część instrukcji z KeysTable na [dbo].[KeysTable]:

 

CREATE VIEW [NewUser].[ViewReferencingScalarFunction] AS SELECT Column2, dbo.SimpleMultiplyParamByTwo(PK_Column) AS [Function] FROM KeysTable

Opcje tabeli i indeksu


Operacja porównywania schematów nie obsługuje opcji używających funkcji sp_tableoption lub sp_indexoption. Nie istnieje obejście tego problemu.

Przekroczony limit czasu podczas porównywania dużych baz danych


W przypadku wystąpienia błędu limitu czasu podczas porównywania schematów dużych baz danych może być konieczne zwiększenie wartości limitu czasu. Opcja ta nie jest dostępna za pośrednictwem interfejsu użytkownika. Należy zmodyfikować określaną w sekundach wartość QueryTimeoutSeconds przechowywaną w kluczu rejestru HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\VSTSDB\Database. Domyślnie limit czasu wynosi 60 sekund.

Porównywanie plików i grup plików


Jeśli grupa plików w docelowej bazie danych jest tylko do odczytu, ta właściwość będzie zawsze wyświetlana jako różnica w porównaniu schematów między bazą danych i projektem bazy danych. Dodatkowo główna grupa plików jest ignorowana podczas porównywania schematów.

Co więcej, w przypadku próby zsynchronizowania dwóch baz danych na tym samym serwerze mogą wystąpić problemy podczas synchronizacji plików pomocniczych i strumieni. Problemy te można rozwiązać, wykluczając grupy plików i pliki podczas synchronizacji.

Rozwiązywanie problemów z analizą wpływu testu

Podczas wyświetlania danych analizy wpływu testu, takich jak informacje na temat zalecanych testów jednostkowych umożliwiających weryfikację zmian kodu, mogą występować błędy.

Brak powiązanego serwera Team Foundation Server


Błąd „No associated Team Foundation Server” (Brak powiązanego serwera Team Foundation Server) jest wyświetlany w przypadku otwarcia widoku wpływu testu przed zebraniem danych wpływu testu za pomocą kompilacji za pomocą funkcji Team Foundation Build (Kompilacja Team Foundation).

Uwaga
Aby rozwiązać ten problem, należy przeprowadzić testy jednostkowe powiązane z kodem przy użyciu funkcji Team Foundation Build. Więcej informacji można znaleźć w temacie Kompilowanie i monitorowanie kompilacji (j.ang.). Jeśli nie zdefiniowano typu kompilacji dla testów jednostkowych, przed ich przeprowadzeniem należy to zrobić. Więcej informacji można znaleźć w temacie Tworzenie definicji kompilacji i praca z nimi (j.ang.). Kod aplikacji i testy jednostkowe muszą także zostać zaewidencjonowane w systemie kontroli wersji.

Komunikaty o błędach funkcji bazy danych pakietu Visual Studio

Podczas korzystania z pakietu Visual Studio może występować wiele błędów. W przypadku znacznej części z nich można kliknąć błąd w oknie Error List, a następnie nacisnąć klawisz F1 w celu uzyskania dodatkowych informacji. Ten temat zawiera listę błędów, dla których są dostępne dodatkowe informacje.

SQL03006:{obiekt odwołujący} zawiera nierozwiązane odwołanie do obiektu.

Ten błąd występuje, gdy istnieje wiele możliwych relacji między obiektami. Pełny tekst komunikatu o błędzie jest następujący: „SQL03006: {referencing object} contains an unresolved reference to an object. Either the object does not exist or the reference is ambiguous because it could refer to any of the following objects: {list of objects}”. (SQL03006: {obiekt odwołujący} zawiera nierozwiązane odwołanie do obiektu. Obiekt nie istnieje lub odwołanie jest wieloznaczne, ponieważ może wskazywać na dowolny z następujących obiektów: {lista obiektów}).

Aby usunąć ten błąd

  • Należy nadać wieloznacznemu odwołaniu obiektu w pełni kwalifikowaną nazwę, a następnie zapisać zaktualizowaną definicję obiektu.

Przykład


Ten błąd jest wyświetlany podczas próby utworzenia widoku o nazwie v1, gdy istnieją następujące definicje obiektów:

CREATE TABLE t1 (c1 int, c2 int)
CREATE TABLE t2 (c1 int, c2 int)
CREATE VIEW v1 AS SELECT c1 FROM t1,t2

W tym przypadku w celu usunięcia błędu można zmienić definicję widoku v1 w następujący sposób:

CREATE VIEW v1 AS SELECT c1 FROM t1,t2

SQL02038: W przypadku instrukcji DROP STATISTICS należy podać nazwę obiektu (tabeli lub widoku) oraz nazwę statystyk w formacie objectName.statisticsName.

Ten błąd występuje, gdy instrukcja DROP STATISTICS zawiera niekompletną nazwę statystyk. (Nazwa ma mniej niż dwie części).

Aby usunąć ten błąd

  • Należy określić dwu- lub trzyczęściową nazwę w instrukcji DROP STATISTICS.

Przykład


Przykład poniżej zawiera niekompletną nazwę statystyk:

DROP STATISTICS s1

SQL03020: Nazwa bazy danych jest nieprawidłowa. Należy użyć nazwy bazy danych $(databasename).

Ten błąd występuje w przypadku określenia nazwy bazy danych w instrukcji ALTER DATABASE. Jeśli ten typ instrukcji zostanie użyty do modyfikacji bazy danych objętej wdrożeniem, należy użyć parametru zastępczego $(databasename). Podczas wdrażania zmian parametr zastępczy jest automatycznie zastępowany nazwą docelowej bazy danych. Ten błąd może na przykład wystąpić w definicji pliku lub grupy plików.

Aby usunąć ten błąd

  1. Kliknij prawym przyciskiem myszy obiekt lub skrypt bazy danych zawierający instrukcję ALTER DATABASE, a następnie kliknij polecenie Open (Otwórz).

Skrypt zostanie otwarty w edytorze Transact-SQL.

  1. Zmień instrukcję ALTER DATABASEDatabaseName na ALTER DATABASE$(databasename).
  2. Zapisz skrypt.
  3. Ponownie skompiluj projekt bazy danych.

SQL03062: Podczas tworzenia obiektu tego typu w projekcie bazy danych nazwa obiektu może zawierać maksymalnie dwie części.

Ten błąd występuje, gdy definicja obiektu zawiera co najmniej trzy części, ale oczekiwano nazwy dwuczęściowej w formacie [Schemat].[NazwaObiektu].

Aby usunąć ten błąd

  • Usuń dodatkowe kwalifikatory i nadaj obiektowi nazwę zgodną ze składnią [Schemat].[NazwaObiektu].

Przykład


Ten błąd jest wyświetlany w przypadku utworzenia obiektu, takiego jak widok, i nadaniu mu nazwy trzyczęściowej w następujący sposób:

CREATE VIEW DatabaseName.SchemaName.View1 
AS 
SELECT * FROM t1;