Kategorie: "SQL Server"

sp_spaceused in Tabelle unleiten

Posted on Jul 29, 2004 von in SQL Server
USE PUBS 
GO
SET NOCOUNT ON
CREATE TABLE #TableSpace
(
	Name char(20)
	,RowCnt int
	,Reserved varchar(15)
	,Data varchar(15)
	,Index_Size varchar(15)
	,Unused varchar(15)
)
DECLARE @Table sysname
DECLARE TableCur 
	CURSOR FOR
	SELECT 
		Table_Name
	FROM 
		INFORMATION_SCHEMA.Tables
	WHERE 
		Table_Type = 'BASE TABLE'
	AND 
		OBJECTPROPERTY(OBJECT_ID(Table_Name),'IsMSShipped') = 0
	OPEN TableCur FETCH NEXT FROM TableCur INTO @Table

WHILE @@FETCH_STATUS = 0
	BEGIN
		INSERT #TableSpace EXEC sp_spaceused @Table
		FETCH NEXT FROM TableCur INTO @Table
	END
CLOSE TableCur
DEALLOCATE TableCur
SELECT * FROM #TableSpace
DROP TABLE #TableSpace
SET NOCOUNT OFF

Name                 RowCnt      Reserved        Data            Index_Size      Unused          
-------------------- ----------- --------------- --------------- --------------- --------------- 
__tmpTBLCOL          131         80 KB           16 KB           8 KB            56 KB
authors              23          40 KB           8 KB            32 KB           0 KB
discounts            3           16 KB           8 KB            8 KB            0 KB
dup_authors          40          80 KB           16 KB           8 KB            56 KB
employee             43          40 KB           8 KB            32 KB           0 KB
jobs                 14          24 KB           8 KB            16 KB           0 KB
max_t                4           16 KB           8 KB            8 KB            0 KB
median               8           16 KB           8 KB            8 KB            0 KB
pub_info             8           160 KB          120 KB          16 KB           24 KB
publishers           8           24 KB           8 KB            16 KB           0 KB
roysched             86          32 KB           8 KB            24 KB           0 KB
sales                21          56 KB           8 KB            48 KB           0 KB
silly_one            0           0 KB            0 KB            0 KB            0 KB
stores               6           24 KB           8 KB            16 KB           0 KB
tableCounts          15          16 KB           8 KB            8 KB            0 KB
titleauthor          25          56 KB           8 KB            48 KB           0 KB
titles               18          40 KB           8 KB            32 KB           0 KB
Trace_Table_Name     0           0 KB            0 KB            0 KB            0 KB
vals                 127         24 KB           8 KB            16 KB           0 KB
x                    2           16 KB           8 KB            8 KB            0 KB

Danke an Jonathan van Houtte für das Originalskript.
Um sicherzustellen, dass RowCnt aktuell ist, sollte man vorher

DBCC UPDATEUSAGE(0) WITH COUNT_ROWS

ausführen.

Fakultät einer Zahl

Posted on Jul 26, 2004 von in SQL Server
CREATE FUNCTION dbo.fakultät(@n DECIMAL(38,0))
RETURNS DECIMAL(38,0)
AS
BEGIN
DECLARE @tmp DECIMAL(38,0)
IF (@n <= 1)
SELECT @tmp = 1
ELSE
SELECT @tmp = @n * dbo.fakultät(@n - 1)
RETURN @tmp
END
GO
SELECT dbo.fakultät(10)
DROP FUNCTION dbo.fakultät

----------------------------------------
3628800

(1 row(s) affected)

Spielt man dieses Spielchen weiter, wird man feststellen, dass man bei Zahlen grösser als 32, folgende Meldung erhält:

Server: Nachr.-Nr. 217, Schweregrad 16, Status 1,  Prozedur fakultät, Zeile 9
Die maximale Schachtelungsebene für .... (Limit ist 32).

Man wird auch feststellen, dass bei Input von 32 eine Abweichung zu Excel existiert.

Steigung einer Geraden

Posted on Jul 26, 2004 von in SQL Server
DECLARE @x1 FLOAT
DECLARE @x2 FLOAT
DECLARE @y1 FLOAT
DECLARE @y2 FLOAT

SELECT @x1 = 1, @x2 = 2, @y1 = 1, @y2 = 2
SELECT (@y2-@y1)/(@x2-@x1)

-----------------------------------------------------
1.0

(1 row(s) affected)

Oder als UDF

CREATE FUNCTION dbo.steigung(@y1 FLOAT,@y2 FLOAT, @x1 FLOAT, @x2 FLOAT)
RETURNS FLOAT
AS
BEGIN
RETURN (@y2-@y1)/(@x2-@x1)
END
GO

SELECT dbo.steigung(1,2,1,2)
DROP FUNCTION dbo.steigung


-----------------------------------------------------
1.0

(1 row(s) affected)

Postleitzahlen überprüfen

Posted on Jul 22, 2004 von in SQL Server

Hier ist eine Lösung mit Hilfe einer UDF:

Ganze Geschichte »

Postleitzahlen überprüfen

Posted on Jul 22, 2004 von in SQL Server

Hier ist eine Lösung mit Hilfe einer UDF:

Ganze Geschichte »

Der hyperbolische Tangens

Posted on Jul 22, 2004 von in SQL Server

Sozusagen als krönender Abschluss meines Exkurses in die Statistik, hier ein Skript zur Berechnung des hyperbolischen Tangens:

DECLARE @sinhyp FLOAT
DECLARE @coshyp FLOAT
SELECT @sinhyp=0.5, @coshyp=0.5
SELECT
((POWER(EXP(1),@sinhyp) - POWER(EXP(1),-@sinhyp) )/2) /
(( POWER(EXP(1),@coshyp) + POWER(EXP(1),-@coshyp) )/2)

-----------------------------------------------------
0.46211715726000974

(1 row(s) affected)

Auch dies ist eine Adaption aus Excel. Diesmal die Funktion TANHYP(). Da dies nun ziemlich wild aussieht, empfiehlt sich hier der Einsatz der UDF-Variante, die dann komplett so aussieht:

CREATE FUNCTION dbo.hypsin (@sinhyp FLOAT) 
RETURNS FLOAT
AS
BEGIN
RETURN (POWER(EXP(1),@sinhyp) - POWER(EXP(1),-@sinhyp) )/2
END
GO
CREATE FUNCTION dbo.hypcos (@coshyp FLOAT)
RETURNS FLOAT
AS
BEGIN
RETURN ( POWER(EXP(1),@coshyp) + POWER(EXP(1),-@coshyp) )/2
END
GO
CREATE FUNCTION dbo.hyptan (@tanhyp FLOAT)
RETURNS FLOAT
AS
BEGIN
RETURN (dbo.hypsin(@tanhyp)/dbo.hypcos(@tanhyp))
END
GO
SELECT dbo.hyptan(0.5)
DROP FUNCTION dbo.hypsin
DROP FUNCTION dbo.hypcos
DROP FUNCTION dbo.hyptan

-----------------------------------------------------
0.46211715726000974

(1 row(s) affected)

Der hyperbolische Cosinus

Posted on Jul 22, 2004 von in SQL Server

Dies ist die Adaption der Excel Funktion COSHYP()

Ganze Geschichte »

Der hyperbolische Sinus

Posted on Jul 22, 2004 von in SQL Server

Dies ist die Adaption der Excelfunktion SINHYP() in T-SQL.

Ganze Geschichte »