Quantcast
Channel: Für Entwickler: SQL Server Forum
Viewing all 1772 articles
Browse latest View live

SQL-Server Function: String splitten und auswerten

$
0
0

Hallo,

ich möchte eine variable Anzahl an Parametern an eine SQL-Server-Function übergeben. Da das normalerweise nicht so einfach geht, möchte ich die Parameter in einem String codieren und diesen in der Function wieder zerlegen.

Jeder Parameter wird durch einen Buchstaben repräsentiert:

A: Wert 1
B: Wert 2
C: Wert 3...

Die Parameter sollen in einem String codiert werden, z. B.:

String = "U;P;K"

Frage:

Wie kann ich einen solchen String innerhalb einer SQL-Function zerlegen/splitten und anschließend die Einzelteile verarbeiten/durchlaufen?

Danke
Magnus


THROW wird als Syntax nicht erkannt

$
0
0

Hallo, steige gerade von Server SQL 2008 R2 auf SQL Server 2014 um. Bei der Fehlerbehandlung wird mir bei der Eingabe von THROW in dem Catch-Block nicht als Syntax angezeigt. Habe es genau nach Vorgaben der MS Library programmiert. Jedoch wie gesagt, er kennt die nicht. Auch in anderen Skripten, die als Beispiele aufgeführt werden, funktioniert es nicht, steigt immer wieder aus. Für eine kurze Hilfestellung wäre ich dankbar. Viele Grueße Freddy

Update Command von VBA: Err 3146 ODBC-Aufruf fehlgeschlagen

$
0
0

Hallo zusammen,

Server 2014 liegt im Firmennetz

Ich versuche auf eine Tabelle einen Insert (eine Zeile, also "Values") abzusetzen. Der Fehler wir im VBA geworfen.

Der SQL String im Abfragefenster läuft sowohl im Management-Studio als auch im Access mit eingebundener Tabelle im Abfrage Fenster.

Mein Connect ist folgender:

ODBC;DRIVER=SQL Server;SERVER=10.64.firma.y;DATABASE=PMP_TEST;UID=ich;PWD=geheim"

Die Instanzierung ist

    Set db = DBEngine.OpenDatabase("", False, False, stconnect)
    db.Execute strSQL, dbFailOnError

Im Direktfenster kann ich ohne Probleme ein

db.Execute "INSERT INTO ÄNDERUNG (ÄNDERUNG) Values(1)" eingeben

Ich bekomme beim ganz o.g. SQL-Immer den Feher

Err 3146 ODBC-Aufruf fehlgeschlagen

Wo liegt mein Fehler?

Gruß

Raimo


Transaktions-Klammer trotz innerem open/close der Verbindung?

$
0
0

Ich habe mehrere in sich abgeschlossene SQL-Server-Zugriffe. Löschen von Daten, Insert von Daten. Jeder dieser Zugriffe ist so gekappselt, dass er die DB-Verbindung öffnet, aggiert und sie dann wieder schließt. Nun möchte ich aber, dass mehrere Zugriffe eine Transactionsklammer bekommen. Sollte beim BULK-Insert etwas schief laufen, dann soll alles zurückgefahren werden. Geht das oder muss ich über Parameter gesteuert meine Routinen anpassen, dass sie für diesen Fall die DB-Verbindung offen lassen?

VG Hipp


Gruß Hipp

SSRS Summe über gestapeltem Säulendiagramm anzeigen

$
0
0

Hallo,

ich beiße mir seit einiger die Zähne an der Frage aus, wie kann ich Summenwerte oberhalb einer gestapelten Säule im SSRS anzeigen lassen.

Hat jemand eine Antwort für mich?

Danke

Verbindungsprobleme SQL Server 2014 (nach Framework-Update 4.6?)

$
0
0

Gestern habe ich Updates auf meinen beiden Rechnern gemacht.

DotNet-Framework 4.6

Visual Studio 2013 SP5

Visual Studio 2015

Seitdem gibt es folgende Probleme:

Im Management-Studio 2014 sind keine Netzwerkserver mehr zu sehen (beide Rechner). Auf einem Rechner ist auch das Management Studio 2008 installiert. Dort sind die Netzwerk-Verbindungen zu sehen. Zudem hab ich ein selbstgeschriebenes Client Programm, das per SMO (Vers.120) die verfügbaren Server auflisten kann. Diese Funktion zeigt jetzt nur noch eine leere Liste, bei beiden Rechnern.

Auf einem Rechner befindet sich zusätzlich zum SQL Server 2014 auch eine 2008er und eine 2012er Version. Vom Management Studio 2014 aus kann ich mit der 2008er und der 2012er Version verbinden, nicht aber mit der 2014er. Mit dem Management Studio 2008 kann ich mit allen SQL-Servern verbinden.

Mein Verdacht ist der, dass es Probleme im Zusammenspiel zwischen den SMO-Komponenten und dem DotNet-Framework 4.6 gibt; allerdings gab's in den letzten Tagen auch diverse Updates zu Win8.1.

Ist dazu was bekannt?

Gruß,

WiWo

Ausführungsplan interpritieren

$
0
0

Hallo,

ich bin relativ neu im Interpritieren von Ausführungsplänen....
Daher weiss ich nicht genau, auf was ich achten muss, um einen schlechten Plan zu erkennen.

Situation:
Kleine Tabelle mit 1750 Datensätzen und ca. 20 Spalten und einem primary key.
Auf die Spalte vom Typ NVARCHAR(25) habe ich einen Idex gesetzt. Primary key sitzt auf einer anderen Spalte.
Ich schreibe folgende einfache Abfrage:

select * from vis.customer_contactwhere second_name = 'Test';
Nun habe ich die Abfrage mit und ohne den Index auf diese Spalte ausgeführt wird.
Ohne Index:


Mit Index


Ich bin der Meinung, dass für den Ergebnis die Wurzel des Baumes betrachtet werden soll und wie da die Kosten sind
und nicht die einzelnen Blätter, weil es kommt ja am Ende darauf an, wie teuer "Select" ist.
Daraus lese ich ab, dass mit dem Index "Estimated Subtree Cost" um einiges geringer ist, als ohne Index.
Kann ich daraus schließen, dass es mit dem Index besser ist?
Oder kann man aus den angezeigten Informationen keinen Rückschluss ziehen, was besser ist und man sich doch die Blätter betrachten muss?

Danke für die Tipps.

SSIS: Export in Excel

$
0
0

Hallo zusammen,

ich muss einige Export in verschiedene Excel-Dokumente schieben. Soweit kein Problem.
Allerdings möchte der Empfänger bei mehreren Feldern eine Auswahl zur Verfügung haben, wo bestimmte Auswahlmöglichkeiten zur Verfügung stehen. In Excel selbst kein Problem, aber wie mit SSIS?

Freue mich sehr auf eine Antwort.

Viele Grüße
Marco


Text splitten, ggf per RegEx erkennen

$
0
0

Hallo,

in einem Select muss ich aus einem Text-Feld drei Angaben auslesen und in je einer Spalte ausgeben:

"username 30.09.2015 10:29:34"

Wäre das möglich?

Könnte ich sogar per RegEx erkennen ob das Feld mit UserID, Datum und Uhrzeit bestückt ist bevor ich den Inhalt verwende?

Viele Grüsse,
Maximilian

SSRS: Wie kann man ein Diagramm um 90 Grad drehen

$
0
0

Wie kann ich ein Diagramm von

nach rechts um 90 Grad drehen?

Jemand eine Idee?

SASS - Bestandsrechnung über mdx

$
0
0

Hallo,

ich bin ein Neuling was die Analysis Services und vor allem mdx angeht.

Ausgangslage:

Die Bestände werden monatlich in einer Bestandstabelle gehalten, ungefähr so:

Datum - Standort - Artikel - Menge - EK - VK
-----------------------------------------------------------
20150101 -    1     -    1    -   1   -    2,00  -    5,00
20150201 -    1     -    1    -   13  -  26,00  - 65,00

  

Ich möchte nun über den Cube den Bestandsverlauf über die Tage eines oder mehrer Monate betrachten,
aber da der Bestand auf der Monatsebene gehalten wird, ist das so erstmal nicht möglich.

Um diese Anzeige realisieren zu können, bräuchte ich einen Calculated member,
welches mir das Delta pro Tag berechen und ebenfalls die richtigen Werte 
auf den Übergeordneten Ebenen anzeigt.

Der Anfangsbestand eines Monats wird immer aus der Bestandstabelle bezogen.

AB  = Anfangsbestand
WE  = Wareneingang
UMS = Umsatzmenge
EB  = Endbestand


                       AB | WE | UMS | EB(Calc-Member)
------------------------------------------------------
- Jahr 2015      (19)  47    24    24  <-  Letzter Delta Wert  

 - Januar 2015    1   25     8     18 <- Berechnung nur in dieser Zeile ( 1 + 25 - 8 = 18) oder Letzter Delta Wert

   - 01.01.2015   1    0     1        0  <-    1  - 1
   - 02.01.2015       20     0      20  <-    0 + 20   
   - 03.01.2015         0     5      15  <-  20 - 5
   ...
   - 31.01.2015         5     2      18

 - Februar 2015  18  22    16    24
 ....             

Im Prinzip soll der letzte Wert der Hierarchie nach oben übertragen werden.

Die ersten Versuche waren erfolgreich:

 With Member [Measures].[Running Delta Sum] as   

sum(([Datum].[Jahr-Monat].FirstSibling:     

[Datum].[Jahr-Monat].CurrentMember), 

[Measures].[Menge_Bestand] + [Measures].[Menge_WE] - [Measures].[Menge_VK])

[Datum].[Jahr-Monat] = Hierarchie von Jahr bis Tag


Auf Tagesebene gesehen passen die Werte, aber leider werden die Werte für die 
übergeordneten Ebenen (Monat und Jahr) falsch berechnet (wg. FirstSibling).

Wie muss das Feld angepasst werden, damit es wie im obigen Beispiel berechnet werden kann?



Report Viewer mit Parameter etn

$
0
0

Hallo,

ich weiß aus alten Zeiten, dass ich via Java Script mit dem Report Viewer Reports unter Verwendung des Parameters etn= aufrufen konnte. Das erspart es mir, den entity type code zu ermitteln (oder gibt es da im Java Script eine bestimmte Funktion?)

Wer kann mir einen Beispielaufruf nennen?

Gruß, Eckart

Moderator (Stefan Falz): Frage gehört zu Dynamics CRM Report Viewer. OP hat die Frage in diesem Thread neu eingestellt.

SCD 2 Merge und Auditing

$
0
0

Hallo,

ich habe folgendes Scenario implementiert:
- Staging (Tables) und Staging hub (Views)
- Core (Tables) und Core hub (Views)

Das Core besteht dabei aus Headtabelle (SCD 1 Verwaltung) und Versionstabelle (SCD 2 Verwaltung). Zur Datenintegration nutze ich MERGE-Statements und will deren Aktivität tracken (Audit). Für die Head-Tabelle habe ich das hinbekommen (1. Ergebnis im SSMS), für die Version-Tabelle leider nicht. Anbei der Code zum Ausführen:

--Staging tables
IF EXISTS (SELECT * FROM sys.objects WHERE name = (N'Stag_Kunde') AND type = 'u')
DROP TABLE dbo.Stag_Kunde;
GO

CREATE TABLE dbo.Stag_Kunde (
 kunde_bk nvarchar(10) not null default ''
,name nvarchar(50) null default ''
,vorname nvarchar(50) null default ''
,geburtsdatum date null default '1753-01-01'
,[status] nvarchar(20) null  default 'ledig'
,md_row_extract date not null default getdate()
,md_is_current smallint null default 1
,md_extracted_by nvarchar(50) default suser_sname()
);
GO

--Staging hub
IF EXISTS (SELECT * FROM sys.views WHERE name = (N'V_Stag_Kunde') AND type = 'V')
DROP VIEW dbo.V_Stag_Kunde;
GO

CREATE VIEW dbo.V_Stag_Kunde
AS
SELECT * FROM dbo.Stag_Kunde WHERE md_is_current = 1;
GO

IF EXISTS (SELECT * FROM sys.objects WHERE name = (N'Core_Kunde_H') AND type = 'u')
DROP TABLE dbo.Core_Kunde_H;
GO

--Core Head table
CREATE TABLE dbo.Core_Kunde_H (
 sid_h_kunde int identity(1,1) not null
,kunde_bk nvarchar(10) null
,md_inserted_on date not null default getdate()
,md_updated_on date null default getdate()
,md_is_current smallint default 1
,md_source nvarchar(10) default 'Staging'
,md_load_id nvarchar(5)
,md_action_by nvarchar(50) default suser_sname()
);
GO

IF EXISTS (SELECT * FROM sys.objects WHERE name = (N'Core_Kunde_V') AND type = 'u')
DROP TABLE dbo.Core_Kunde_V;
GO

--Core Version table
CREATE TABLE dbo.Core_Kunde_V (
 sid_v_kunde int identity(1,1) not null
,sid_h_kunde int not null
,name nvarchar(50) null
,vorname nvarchar(50) null
,geburtsdatum date null
,[status] nvarchar(50) null
,md_is_current smallint null default 1
,md_valid_from date not null default getdate()
,md_valid_until date null default '9999-12-31'
,md_source nvarchar(10) null default 'Staging'
,md_inserted_on date not null  default getdate()
,md_updated_on date null default getdate()
,md_load_id nvarchar(5) null
,md_action_by nvarchar(50) null default suser_sname()
);
GO

--Befüllen der Staging
DECLARE @date date
SET @date = GETDATE()-10

INSERT INTO dbo.Stag_Kunde
(kunde_bk, name, vorname, geburtsdatum, status, md_row_extract, md_is_current, md_extracted_by
)
VALUES ('100', 'Name1', 'Vorname1', '1972-03-24', 'ledig', @date, 1, SUSER_SNAME() ),
('101', 'Name1', 'Vorname2', '1943-04-02', 'verwitwet', @date, 1, SUSER_SNAME() ),
('102', 'Name2', 'Vorname3', '1963-08-25', 'verheiratet', @date, 1, SUSER_SNAME() )

--Befüllen des Cores (Dummy)
DECLARE @date1 date
SET @date1 = GETDATE()-10

INSERT INTO dbo.Core_Kunde_H
(kunde_bk, md_inserted_on, md_updated_on, md_source, md_load_id)
VALUES ('', @date1, @date1, 'Core', 0);
GO

DECLARE @date date
SET @date = GETDATE()-10

INSERT INTO dbo.Core_Kunde_V
(sid_h_kunde, name, vorname, geburtsdatum, status, md_valid_from, md_source, md_inserted_on, md_updated_on, md_load_id)
VALUES (1, 'keine Zuordnung', 'keine Zuordnung', '1753-01-01', 'keine Zuordnung', @date, 'Core', @date, @date, 0);
GO

/****************************************************************
**Merge Load
****************************************************************/
--Core Head
DECLARE @tabAction_Out Table (col1 nvarchar(20) )
DECLARE @intInsert_Count INT
,@intUpdate_Count INT
,@intDelete_Count INT
,@intLoad_ID INT
,@dateLoad_Date DATE

SET @intLoad_ID = 1
SET @dateLoad_Date = GETDATE()-4

MERGE INTO dbo.Core_Kunde_H AS t
USING (SELECT Kunde_bk FROM dbo.V_Stag_Kunde)
AS s (Kunde_bk)
ON (t.kunde_bk = s.kunde_bk)

WHEN MATCHED
THEN
UPDATE
SET md_updated_on = @dateLoad_Date

WHEN NOT MATCHED BY TARGET
THEN
INSERT (kunde_bk,md_inserted_on,md_updated_on,md_is_current,md_source,md_load_id,md_action_by)
VALUES (s.kunde_bk, @dateLoad_Date, @dateLoad_Date, 1, 'Staging', @intLoad_ID, suser_sname())

OUTPUT $Action as Merge_Action INTO @tabAction_Out;

SET @intInsert_Count = (SELECT COUNT(col1) FROM @tabAction_Out WHERE col1 = 'INSERT')
SET @intUpdate_Count = (SELECT COUNT(col1) FROM @tabAction_Out WHERE col1 = 'UPDATE')
SET @intDelete_Count = (SELECT COUNT(col1) FROM @tabAction_Out WHERE col1 = 'DELETE')

SELECT @intInsert_Count AS insert_count
     , @intUpdate_Count AS update_count
     , @intDelete_Count as delete_count

SELECT *
FROM dbo.Core_Kunde_H;
GO

--Core Version
DECLARE @intLoad_ID INT
,@dateLoad_Date DATE

SET @intLoad_ID = 1
SET @dateLoad_Date = GETDATE()-4

INSERT INTO dbo.Core_Kunde_V (
 sid_h_kunde
,name
,vorname
,geburtsdatum
,status
,md_is_current
,md_valid_from
,md_valid_until
,md_source
,md_inserted_on
,md_updated_on
,md_load_id
,md_action_by
)
SELECT
 sid_h_kunde
,name
,vorname
,geburtsdatum
,status
,md_is_current
,md_valid_from
,md_valid_until
,md_source
,md_inserted_on
,md_updated_on
,md_load_id
,md_action_by
FROM (
MERGE INTO dbo.Core_Kunde_V AS t
USING (
SELECT ISNULL(t2.sid_h_kunde, 1) AS sid_h_kunde, t1.Kunde_bk, name, vorname, geburtsdatum, status
FROM dbo.V_Stag_Kunde AS t1
LEFT JOIN (SELECT sid_h_kunde, kunde_bk FROM dbo.Core_Kunde_H) AS t2
     ON t2.kunde_bk = t1.Kunde_bk
) AS s
(sid_h_kunde, Kunde_bk, name, vorname, geburtsdatum, status)
ON (t.sid_h_kunde = s.sid_h_kunde)

WHEN MATCHED
AND t.md_is_current = 1
AND (
t.name != s.name
OR t.vorname != s.vorname
OR t.geburtsdatum != s.geburtsdatum
OR t.status != s.status )
THEN
UPDATE SET
 t.md_is_current = 0
,t.md_updated_on = getdate()
,t.md_action_by = suser_sname()

WHEN NOT MATCHED BY TARGET
THEN
INSERT (sid_h_kunde, name, vorname, geburtsdatum, status, md_is_current, md_valid_from, md_valid_until, md_source, md_inserted_on, md_updated_on, md_load_id)
VALUES (s.sid_h_kunde, s.name, s.vorname, s.geburtsdatum, s.status, 1, @dateLoad_Date, '9999-12-31', 'Staging', @dateLoad_Date, @dateLoad_Date, @intLoad_ID)

OUTPUT $Action as Merge_Action
,s.sid_h_kunde
,s.Kunde_bk
,s.name
,s.vorname
,s.geburtsdatum
,s.status
,1 as md_is_current
,getdate() as md_valid_from
, '9999-12-31' as md_valid_until
,'Staging' as md_source
,getdate() as md_inserted_on
,getdate() as md_updated_on
,@intLoad_ID as md_load_id
,suser_sname() as md_action_by
) AS Merge_Output
WHERE Merge_Output.Merge_Action = 'UPDATE';
;

SELECT *
FROM dbo.Core_Kunde_V;
GO

Ich möchte das Audit des SCD2-Merge für die Versionstabelle so dargestellt bekommen wie bei der Headtabelle (1. Ergebnis des o.g. SQL's).

Any ideas (feel free to change the sql statement)?

Danke, :)



Fragen zu INSTEAD OF INSERT-Trigger

$
0
0

Hallo,

ich verwende einen INSTEAD OF INSERT-Trigger für einen View, der aus zwei Tabellen besteht. Wenn ein Datensatz in den View eingefügt werden soll, soll der Trigger die Attribute in die beiden Einzeltabellen einfügen.

Den Code habe ich am Ende eingefügt.

Fragen:

  • Wie kann man sicherstellen, dass *alle* übergebenen Attribute in die Einzeltabellen eingefügt werden?
    Die einzige Möglichkeit, die mir einfällt, ist, innerhalb des Triggers alle Attribute aus INSERTED zu verarbeiten, d. h. in die Einzeltabellen einzufügen. Was passiert aber, wenn einige dieser Attribute gar nicht übergeben wurden? Sind die im INSERTED-Datensatz dann NULL?
  • Muss man wirklich alle Attribute aus dem INSERTED-Datensatz zwischenspeichern (s. meinen Code)?
    Kann man sie nicht direkt verwenden?
    Beispiel: INSERT INTO mytable (attribute1,attribute2,...) VALUES (INSERTED.attribute1,INSERTED,attribute2,...)=
    Bei mir wird das im SQL Management Studio als Fehler markiert.
  • Warum ist UPDATE(idx) in meinem Beispiel wahr? (auskommentiert)
    Es handelt sich doch um einen INSERT-Trigger?

Danke für Antworten

Magnus

USE [mydatabase]
GO
/****** Object:  Trigger [dbo].[trg_psv_v_personal_all_insert]    Script Date: 04.10.2015 06:08:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trg_psv_v_personal_all_insert]  on [dbo].[psv_v_personal_all]
INSTEAD OF INSERT
AS
BEGIN
    DECLARE @idx INT, @vorname VARCHAR(50), @nachname VARCHAR(50),@titel VARCHAR(50),@organisation INT,@account VARCHAR(50),@email VARCHAR(50),@notizen VARCHAR(50),
	@einheit VARCHAR(10),@gz VARCHAR(10),@gz_alt VARCHAR(10)

    SELECT @idx = INSERTED.idx,
              @vorname = INSERTED.vorname,
              @nachname = INSERTED.nachname,
			  @titel = INSERTED.titel,
			  @organisation = INSERTED.organisation,
			  @account = INSERTED.account,
			  @email = INSERTED.email,
			  @notizen = INSERTED.notizen,
			  @einheit = INSERTED.einheit,
			  @gz = INSERTED.gz,
			  @gz_alt = INSERTED.gz_alt
    FROM INSERTED

    IF 1 <> 1 -- UPDATE(idx)
    BEGIN
		RAISERROR('idx cannot be updated.', 16 ,1)
        ROLLBACK
    END

	INSERT INTO psv_personal
	(idx,vorname,nachname,titel)
	VALUES (@idx,@vorname,@nachname,@titel,@organisation);

	IF (@organisation=1)
	BEGIN
		INSERT INTO psv_personal_int(idx,gz)
		VALUES (@idx,'Tralla!');
	END


END



Connection

$
0
0

Hallo NG,

für die Verbindung Client<>Server verwende ich normalerweise den  ODBC Treiber "SQL Server Native Client" 10.0 oder 11.0.

in einer Installation Server-PC BS. Server 2008 64 Bit, SQL Server 2012

                                 Client-PC BS Windows 7    32 Bit   

wurde der SQL Server Native Client" 10.0 und 11.0 nachträglich, auf dem Client-PC, installiert es konnte aber keine Verbindung aufgebaut werden.

Lediglich mit dem ODBC Treiber "SQL Server" war ein Verbindungsaufbau möglich.

Was kann hierfür die Ursache sein?

Welche Probleme sind zu erwarten?

Ich bedanke mich für jeden Tipp.

mfG Uli Münch


Drop Table bleibt bestehen

$
0
0

Ich habe eine Tabelle mit 10.800 Zeilen erzeugt.

Ich arbeite mit C# 2013.

Diese Tabelle will ich nun mit Drop Table löschen.

const string connString_synchron = "Data Source=(local);Integrated Security=SSPI;Initial Catalog=Zahlen;" + "MultipleActiveResultSets=True;Async=False";

const string Tabelle_löschen = "DROP TABLE [Table_1]";

SqlConnection

conn_synchron = newSqlConnection(connString_synchron);

SqlCommand Löschkommando = new SqlCommand(Tabelle_löschen, conn_synchron);

conn_synchron.Open();

Löschkommando.ExecuteNonQuery(); conn_synchron.Close();

Ich erhalte dann den Rückgabewert -1

Gleich danach erstelle ich die selbe Tabelle neu.

const string connString1 = "Data Source=(local);Integrated Security=SSPI;Initial Catalog=Zahlen;"+ "MultipleActiveResultSets=False;Async=False";
SqlConnection conn1 = new SqlConnection(connString1);
const string Tabelle_erstellen = "CREATE TABLE [Table_1] ([Zahl 1] TINYINT)";
SqlCommand Erstellkommando = new SqlCommand(Tabelle_erstellen, conn1);
conn1.Open();
Erstellkommando.ExecuteNonQuery();
Erstellkommando.Dispose();
conn1.Close();

Und oh Wunder, trotz löschen der Tabelle mit "Drop Table" und neuerstellen habe ich immer noch die selbe Tabelle mit den 10.800 Zeilen.

Selbst als ich mit dem Microsoft SQL Server Management Tool die Tabelle gelöscht hatte und einmal überprüft hatte, mit dem roten Ausführungszeichen - Knopf, ob die Tabelle keine Einträge mehr hatte, die hatte ich auch nicht mehr. Zeilenzahl war 0, habe ich unter C# die Tabelle mit Create Table neu erstellt, hatte ich wieder dasselbe Problem - wieder 10.800 Zeilen.

Was läuft da falsch?

Speichert der SQL Server die Tabelle intern und füllt die dann automatisch wieder mit dem alten Kram auf?

Ich will doch nur alle Zeilen gelöscht haben.

Mit Async=True ist es genauso.

Join von Tabellen ohne Relation

$
0
0

Hallo Community,

ich habe ein Problem mit einem aktuellen Projekt. Und zwar habe ich zwei Tabellen in folgendem Format.

Tabelle 1 (Zeitraum)

Anfangszeit; Endzeit; Artikelnummer

10:00 Uhr; 11:00 Uhr; 2222

11:01 Uhr; 11:30 Uhr; 4444

11:31 Uhr; 12:21 Uhr; 2222

12:22 Uhr; 15:00 Uhr; 5555

....

Tabelle 2 (minütlich neue Datensätze)

Zeit; Leistung

9:59 Uhr; 13

10:00 Uhr; 22

11:01 Uhr; 22.01

10:11 Uhr; 26

....

Ich würde jetzt gerne wissen, wie ich es schaffen kann, die Werte für den bestimmten Zeitraum für ein Artikel abzufragen (so wie unten formuliert). Die Leistungswerte werden immer addiert, sodass ich immer den ersten und letzten Wert der Zeitspanne ausgegeben haben müsste.

Anfangszeit, Endzeit, Artikel, Anfangswert, Endwert, Differenz

10:00 Uhr; 11:00 Uhr; 2222;  22; 26; 4

11:01 Uhr; 11:30 Uhr; 4444

11:31 Uhr; 12:21 Uhr; 2222

12:22 Uhr; 15:00 Uhr; 5555

  DECLARE @Anfangszeit DATETIME
  DECLARE @Endzeit DATETIME
  DECLARE @Produktnummer INT
  DECLARE @Anfangswert FLOAT
  DECLARE @Endwert FLOAT


SELECT @Anfangszeit = [Anfangszeit],
		@Endzeit = [Endzeit],
		@Produktnummer = [Produktnummer]
		FROM [dbo].[Produktlaufzeiten];

SELECT @Anfangswert =  Tabelle2
					FROM DB2					WHERE [Timestamp] Between @Anfangszeit AND @Endzeit Order by Leistung DESC;

SELECT @Endwert =  Leistung					FROM DB2
					WHERE [Timestamp] Between @Anfangszeit AND @Endzeit;

SELECT @Anfangszeit AS Anfangszeit, @Endzeit AS Endzeit, @Produktnummer AS Produktnummer, @Anfangswert AS Anfagswert, @Endwert AS Endwert, @Endwert - @Anfangswert AS Differenz;
  DECLARE @myDate1 DATETIME
  DECLARE @myDate2 DATETIME
  SET @myDATE1 = '2015-10-05T10:00:00.150'
  SET @myDATE2 = '2015-10-05T09:57:00.151'
  DECLARE @TEST int
  SELECT @TEST = [Produktnummer] FROM [dbo].[Produktlaufzeiten] WHERE [Anfangszeit] > '2015-10-05T09:56:00.149' AND [Endzeit] < '2015-10-05T10:01:00.151';
  SELECT [Id],[Timestamp] , LeisutngwWERT,[Produktion],@TEST FROM DB2,[dbo].[Produktlaufzeiten] WHERE [Timestamp] Between @myDate2 AND @myDate1;


Hoffe sehr auf eure Hilfe.


SQLServer2012 ReportBuilder3.0 Anzeige Phänomen

$
0
0

Guten Tag

In einem Report habe ich mir eine Liste erstellt. In der ersten Spalte ist das aufsteigende Datum. Für eine bessere Sichtbarkeit habe ich die Zelle folgendermassen formatiert: Beim Ausfüllen -- Füllfarbe habe ich =IIf(Fields!WOCHENTAG.Value = 7 ,"LightGrey" , "Transparent") hinterlegt. Bei der normalen Druckansicht und beim Export als .pdf funktioniert das auch tadellos. Jeder Sonntag wird hellgrau hinterlegt. Wenn ich nun aber einen Export als .xlsx mache, dann wird mir ab dem ersten Sonntag in der Liste alle nachfolgenden Tage ob Monat oder Dienstag hellgrau markiert. Siehe Beispiel 1. Bild = Excel 2. Bild = pdf

 

Gibt es da eine Möglichkeit dies korrekt darzustellen? Oder ist das ein kleiner Bug? 

Herzlichen Dank 

Freundliche Grüsse

Walo Beck

Horizontale Partitionen

$
0
0

Hallo zusammen,

aktuell schreibe ich an meiner Bachlelorarbeit zum Thema Datenbankoptimierung. Ein wichtiger Punkt ist hierbei auch das Erstellen horizontaler Partitionen für den weltweiten Zugriff auf eine Tabelle. Partitioniert wird hier nach verschiedenen Geschäftsbereichen eines Unternehmens. Ich habe nun das Problem, dass ich eine grafische Darstellung erstellen möchte, aber an einer Stelle keine, bzw. nur unzureichende, Informationen finde. Wenn ich die Partitionen auf unterschiedlichen Servern zur Verfügung stelle und nun eine Query abgeschickt wird, muss diese doch zunächst von einem zentralen Server verarbeitet werden, dann die Daten von dem entsprechenden Server mit der passenden Partition abgerufen werden und vom zentralen Server wieder an den Client zurückgegeben werden oder? Das würde bezüglich Performance ja keinerlei Vorteil ergeben. Oder ist es so, dass der Server mit der Partition dem Client antwortet?

Ich habe in den Anhang mal eine Grafik eingefügt, wie ich mir das aktuell Vorstelle. Kann mir das so bestätigt werden oder liege ich falsch?

Vielen Dank für eure Mühe,

Christian

Login erzwingen

$
0
0

Hallo an alle,

ich habe eine Webanwendung die über php diverse SQL Abfragen macht. Dieses funktioniert zur zeit alles über Single Sign on. Das ist realisierbar da alle Rechner in der Domain sind. Jedoch gibt es Rechner wo sich nicht der User sondern ein Service-Account anmeldet. Ich brauch die User-Anmeldung. Ich möchte also das ein Webinterface die Eingabe von Username und Passwort (DomainUser und Passwort) nutzt und diese Daten an den SQL Server weiterreicht.

Diese Authentifizierung gibt es beim IIS unter windowsauthentifizierung. Auch gibt es diese beim SQL Server aber wie kann ich die Eingabe von Name und Passwort erzwingen. So dass nicht der am System angemeldete User genutzt, wird sondern jener der übergeben wird.

Kann mir jemand ein paar tipps geben?

Viewing all 1772 articles
Browse latest View live
<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>