Cześć,
W jaki sposób poprawnie zapisać coś w stylu ? [MS SQL 2005]
DECLARE @a INTEGER
EXEC( ' SELECT @a = cos FROM .. ' )
PRINT(@a)
Rozumie dlaczego to nie działa, ale nie mam pojęcia jak poprawić ten kod.
Cześć,
W jaki sposób poprawnie zapisać coś w stylu ? [MS SQL 2005]
DECLARE @a INTEGER
EXEC( ' SELECT @a = cos FROM .. ' )
PRINT(@a)
Rozumie dlaczego to nie działa, ale nie mam pojęcia jak poprawić ten kod.
o cos takiego Ci chodzi?
EXEC
(
'declare @a int ' +
'select @a= 10 ' +
'print cast(@a as varchar)'
)
Wolałbym uniknąć zamknięcia całości w EXEC, bo musiałbym mieć EXEC w EXEC.
Jest jakiś inny sposób na to ?
tabele tymczasowe? funkcje? procedury?
Opisz problem jaki masz do rozwiazania.
Ps w wersji MS SQL od 2008 masz operatory zlaczenia CROSS APPLY
mozesz napisac inline scalar function.
Czymś analogicznym co chciałbym zrobić to napisanie funkcji obliczającej liczbę wierszy:
Argumentem funkcji byłaby Kwerenda ( czyli VARCHAR(MAX) ).
OPENROWSET
Mógłbyś napisać przykład funkcji do wyznaczenia liczby wierszy (o argumencie @KWERENDA) ?
Ale czemu FUNKCJĘ chcesz uruchamiać przez EXEC?? I funkcja z reguły zwraca jakąś wartość...
Nie mówię, że chcę przez uruchomić funkcję przez EXEC.
Myślę, że w funkcji trzeba skorzystać z EXEC.
Nie wiem jak dlatego napisałem posta.
CREATE PROCEDURE CountData(@SQL VARCHAR(MAX))
AS
BEGIN
EXEC(
' SELECT ' +
' COUNT(*) ' +
' FROM ' +
' ( ' + @SQL + ') X '
)
END;
A uzycie
CountData 'SELECT * FROM sys.tables'
Tylko po co? :)
Jak dla mnie to niezly "przeszczep" cos takiego.
A datasource w Twojej aplikacji nie udostepnia tego? counta?
Teraz sobie przypomniałem, bo dawno MS SQL nie używałem... Ma przecież zmienną systemową @ @ ROWCOUNT - http://msdn.microsoft.com/en-us/library/ms187316.aspx. Można ją użyć np. tak: SELECT * FROM tabela SELECT @@ROWCOUNT
Zwróci wtedy dwa recordsety, w którym ten drugi będzie miał tylko jeden wierss i jedną kolumnę - właśnie ilość rekorrdów.
pozdrawiaMM
EDIT: Dwie małpy włączają kursywę?? :)
Niektore kontrolki nie akceptuja wielu datasetow i czytaja tylko pierwszy.
PS uzywajac @@ROWCOUNT
DTS musi przeslac caly resultset do klienta.
Jesli beda to duze resultsety to mozna odczuc roznice.