Ta sama zmienna, ale w innej instrukcji.

Ta sama zmienna, ale w innej instrukcji.
SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
0

Cześć,

W jaki sposób poprawnie zapisać coś w stylu ? [MS SQL 2005]

Kopiuj
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.

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0

o cos takiego Ci chodzi?

Kopiuj

EXEC
(
	'declare @a int ' + 
	'select @a= 10 ' + 
	'print cast(@a as varchar)'
)

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
0

Wolałbym uniknąć zamknięcia całości w EXEC, bo musiałbym mieć EXEC w EXEC.

Jest jakiś inny sposób na to ?

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0

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.

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
0

Czymś analogicznym co chciałbym zrobić to napisanie funkcji obliczającej liczbę wierszy:
Argumentem funkcji byłaby Kwerenda ( czyli VARCHAR(MAX) ).

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0

OPENROWSET

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
0

Mógłbyś napisać przykład funkcji do wyznaczenia liczby wierszy (o argumencie @KWERENDA) ?

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

Ale czemu FUNKCJĘ chcesz uruchamiać przez EXEC?? I funkcja z reguły zwraca jakąś wartość...

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 80
0

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.

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0
Kopiuj
CREATE PROCEDURE CountData(@SQL VARCHAR(MAX))
AS
BEGIN
	EXEC(
			' SELECT ' + 
			'   COUNT(*) ' + 
			' FROM ' + 
			'   ( ' + @SQL + ') X '
		)

END;

A uzycie

Kopiuj
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?

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

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ę?? :)

crowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 295
0

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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.