Mamy SQL, który wykonuje funkcję CAST (do FLOAT) na ColumnA. SQL ma filtr, który na koniec pośrednio odfiltruje te wiersze, które mają wartości inne niż liczbowe w kolumnie A. Jednak ze względu na to, co moim zdaniem wynika z działania części SQL w równolegle, uważam, że CAST jest nawet stosowane do wierszy, które są filtrowane i to powoduje, że SQL nie powiedzie się "nie można oddać wartości jako float ... "nie można rzutować wartości jako float
wiem, że jeśli będę biegać z jednego proc dodając wskazówkę zapytania
OPTION (MAXDOP 1)
że SQL działa jako oczekiwane. Podejrzewam, że uruchomienie 1 proc powoduje, że filtr zostanie zastosowany do wygaszenia wiersza z wartościami nieliczbowymi w kolumnie A, aby CASTING jego wartości się powiódł. Uważam również, że stosując wskazówkę zapytaniu
OPTION (FORCE ORDER)
rozwiązuje problem, jestem zakładając becausethis też zapewnia, że filtr jest stosowany pierwszy i uzyskać znacznie lepszą wydajność kwerendy, że jedna działa na jednym cylindrze.
Jestem opiekunem, który naprawia problem za pomocą drugiej opcji. Jeśli mam jakieś nieporozumienia dotyczące tego, co się tu dzieje, lub jeśli ktoś chciałby wyjaśnić moje ogólne zrozumienie lub zalecenie, byłbym wdzięczny.
używam na
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1720.0 (X64) 12 czerwca 2010 01:34:59 Copyright (c) Microsoft Corporation Enterprise Edition (64- bit) w systemie Windows NT 5.2 (Build 3790: Service pack 2)
namyśle:
wydaje się, że byłoby miło, T-SQL miał następujące funkcje sprawdzić, jeśli ciąg mógł być przenośnym przywrócone do określonego typu danych.
IsFloat IsNumeric IsInteger itp
naprawdę jestem zły na ile kolumn wszelkiego rodzaju danych, które mi się znaleźć w naszej bazie danych, które są zdefiniowane jako varchar (255). Myślę, że rozwiązaniem jest "nie robić tego!"
Czy możesz pokazać kod SQL? – MatBailie
Prosi nas, abyśmy pomogli naprawić samochód, nie zauważając samochodu. Pokaż nam samochód. – JNK
T-SQL ma IsNumeric – MatBailie