Archiv der Kategorie: MS SQL Server

MS SQL Server: Last Index Of / lastIndexOf / Get last Index Of

Problem

There is no SQL Function to get the last index of a string.

Ansatz – Approach

The first two lines only declare a variable myString with content SER-SOP-12 to Test the combined SQL Functions.
The SELECT-Clause returns the lastIndex of (can be used in standard MS SQL Statements)

Lösung – Solution

Just copy it to the MS SQL Server Management Studio in a query window to test and press F5:

DECLARE @myString AS varchar(255)
SET @myString ='SER-SOP-12'
SELECT LEN(@myString )-CHARINDEX('-', REVERSE(@myString )) 

Atlassian JIRA+MS SQL Server Get values from multiple version picker custom field in SQL / Mulitple Version Picker Werte über SQL Query erhalten

Problem

The version strings of custom field, that can select multiple versions, shall be selected

Approach – Ansatz

The table projectversion can be used to connect to CustomFieldValue.NUMBERVALUE

Solution – Lösung

SELECT pk.PROJECT_KEY+'-'+CAST(a.issuenum AS varchar(max)) as issue, pv.vname
FROM project_key pk
INNER JOIN jiraissue a ON pk.PROJECT_ID=a.PROJECT 
INNER JOIN CustomFieldValue b ON a.ID=b.ISSUE
INNER JOIN customfield c ON b.CUSTOMFIELD=c.id 
INNER JOIN projectversion pv ON pv.ID=b.NUMBERVALUE
WHERE c.CFName = 'LUA Version(s)' 
--AND pk.PROJECT_KEY+'-'+CAST(a.issuenum AS varchar(max)) ='NDS-4352'
ORDER BY 1

MS SQL Server: Stored Procedure mit Übergabeparameter

Problem

Es soll eine Stored Procedure erstellt werden

Ansatz – Approach

– Verwendung von SQL

Voraussetzung – Prerequirement

Create Procedure Permission/Berechtigung

Lösung – Solution

Dieser Code wird in ein SQL Management Studio Abfragefenter kopiert, markiert und mit F5 ausgeführt.

IF OBJECT_ID ( ‚dbo.sp_PreviousAcitivites‘, ‚P‘ ) IS NOT NULL
DROP PROCEDURE dbo.sp_PreviousAcitivites;
GO
CREATE PROCEDURE dbo.sp_PreviousAcitivites
@StartPoint nvarchar(50)
AS

SET NOCOUNT ON;
SELECT ‚>’+@StartPoint+‘<' GO [/javascript] Mehrere Übergabeparameter werden durch Kommas getrennt. Aufruf der Stored Procedure: [javascript] dbo.sp_PreviousAcitivites 'Bla' [/javascript]

MS SQL Server: Remove / Strip HTML Tags from Field – HTML Tags entfernen

Problem

Aus einer Selektion sollen alle HTML Tags entfernt werden.

Ansatz – Approach

– Erstellen einer Function
– SQL Abfrage absetzen (z.B. i.e. dbo.udf_StripHTML(‚HTML‚))

– Create a custom function
– Make your SQL Statement (i.e. dbo.udf_StripHTML(‚HTML‚))

Lösung – Solution

Als erstes wird die Funktion udf_StripHTML(STRING) erstellt:

CREATE FUNCTION [dbo].[udf_StripHTML] (@HTMLText VARCHAR(MAX))
RETURNS VARCHAR(MAX) AS
BEGIN
    DECLARE @Start INT
    DECLARE @End INT
    DECLARE @Length INT
    SET @Start = CHARINDEX('<',@HTMLText)
    SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
    SET @Length = (@End - @Start) + 1
    WHILE @Start > 0 AND @End > 0 AND @Length > 0
    BEGIN
        SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
        SET @Start = CHARINDEX('<',@HTMLText)
        SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
        SET @Length = (@End - @Start) + 1
    END
    RETURN LTRIM(RTRIM(@HTMLText))
END
&#91;/javascript&#93;
Der obige Text wird hierzu einfach in das SQL Server Management Studio kopiert, markiert und ausgeführt. 

Zum Schluss wird die Abfrage abgesetzt:
&#91;javascript&#93;
SELECT dbo.udf_StripHTML(htmlTextFeld) FROM Tabelle

-- ODER

SELECT dbo.udf_StripHTML('<a href="irrsinn.php">Grober Unfug</a> ist keine <b>Methode</b> sondern <div style="font-family:Times;">Kriegsführung</div>')

Microsoft SQL Server Express: Wie man die Datenbankgröße herausfindet / How-to get the Database size

Prämisse

Bei MS SQL Server 2012 Express und 2014 Express darf die maximale Datenbankgröße nur 10 GB betragen.

Problem

Wie findet man die Datenbankgröße heraus?

Ansatz

SQL Server Server Statement

Lösung – Solution

SELECT 
      database_name = DB_NAME(database_id)
    , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
    , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
    , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
FROM sys.master_files WITH(NOWAIT)
WHERE database_id = DB_ID() -- for current db 
GROUP BY database_id

Microsoft SQL Server: Enable SQL Server Autentication (mixed mode) / Login für SQL User mit Connectionstring ermöglichen

Problem

Der SQL Server erlaubt keine Zugriffe über einen Connectionstring.
Microsoft SQL Server does not allow

Analyse

Also Standardauthentifizierungsmethode ist „Windows Authentication“ ausgewählt. Man benötigt „SQL Authentication„, was als „mixed mode“ im Microsoft SQL Server Kontext genannt wird.

Vorgehensweise

1.) Öffnen Sie Microsoft SQL Server Management Studio Express und klicken Sie mit der rechten Maustaste auf den Server Knoten.

schritt1

2.) Im Navigationsmenü auf der linken Seite wählen Sie den Punkt „Security“ aus und sehen die folgenden Einstellungen, in denen Sie „mixed mode“ aktivieren können, um Zugriffe per Connectionstring grundsätzlich zu erlauben.

schritt2

MS SQL Server: The database principal owns a schema in the database, and cannot be dropped

Problem

Ein Microsoft SQL Server User kann nicht gelöscht werden. Es erscheint die Fehlermeldung

„The database principal owns a schema in the database, and cannot be dropped“

Ansatz – Approach

Nutzung des Systemkatalogs zum finden der betroffenen Schemas
Änderung der Berechtigungen mit ALTER AUTHORIZATION
Löschen des Benutzers

Lösung – Solution

SELECT name FROM sys.schemas WHERE principal_id = USER_ID('benutzer')

Gefundene Principals (z.B. db_owner…) in Alter Authorization eintragen:

ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo
ALTER AUTHORIZATION ON SCHEMA::db_datareader TO dbo

DROP USER benutzer

Atlassian JIRA+MS SQL Server: Get selected custom field value for Issue from JIRA Database in SQL

Problem

A selected custom field value, that is in a MS SQL Server JIRA Database should be retrieved.

Ansatz – Approach

The tables project_key, jiraissue, CustomFieldValue, customfield and customfieldoption have to be joined

Lösung – Solution

SELECT pk.PROJECT_KEY+'-'+CAST(a.issuenum AS varchar(max)) as issue, c.cfname as field, d.customvalue 
FROM project_key pk
INNER JOIN jiraissue a ON pk.PROJECT_ID=a.PROJECT 
INNER JOIN CustomFieldValue b ON a.ID=b.ISSUE
INNER JOIN customfield c ON b.CUSTOMFIELD=c.id 
INNER JOIN customfieldoption d ON c.id=d.CUSTOMFIELD 
WHERE c.CFName = 'Requirements/Specifications affected?' 
AND   b.STRINGVALUE=CAST(d.id as varchar(max))

Excel VBA: Create dynamic worksheet from SQL Query / Excel Arbeitsblatt durch SQL Query erstellen

Problem

A new Worksheet should be created, that contains the result of an SQL Query (ADODB) generic (in the way, that no column names have to be adressed in the recordset.

Approach – Ansatz

  • Iteration over the Resultsets field names to get Meta Information / Header names
  • Usage of CopyFromRecordSet method of the Range Object: worksheet.Range(„A2“).CopyFromRecordset Rs

Solution – Lösung

Sub CreateExcelSheetWithQueryResult(ws As Worksheet, sql As String)
    Dim Cn As New ADODB.Connection
    Dim Rs As New ADODB.Recordset
    Dim vaTmp() As String
    
    Cn.Provider = "SQLOLEDB.1"
    
    Cn.ConnectionString = "Password=pass;" & _
    "Persist Security Info=True;" & _
    "User ID=user;" & _
    "Initial Catalog=databaseName;" & _
    "Data Source=ServernameOrIP"
    
    Cn.Open
    
    Rs.CursorType = adOpenKeyset
    Rs.LockType = adLockPessimistic
    Rs.Open sql, Cn, adOpenStatic
   
    ws.Cells.Clear
    
    ' This section fills in the field names from the Orders table.
    ReDim vaTmp(Rs.Fields.Count)
    For x = 0 To Rs.Fields.Count - 1
        vaTmp(x) = Rs.Fields(x).Name
    Next
    ws.Cells(1, 1).Resize(1, Rs.Fields.Count) = vaTmp
   
    ws.Range("A2").CopyFromRecordset Rs
    
    Rs.Close
    Cn.Close
End Sub

And if you want to create a new Excel sheet you can do this with a button that assigned macro contains the following source:

Sub DetailQuery1_KlickenSieAuf()
    Dim ws As Worksheet
    Sheets.Add After:=Sheets(Sheets.Count)
    ' Referenz darauf
    Set ws = Sheets(Sheets.Count)
    CreateExcelSheetWithQueryResult ws, "SELECT TOP 10 * FROM irrsinn"
    
End Sub

MS SQL Server: Concat Strings in Group By Clausel / Group By, Strings gruppieren

Problem

Strings sollen in einer Group By Klausel anhand eines Attributs gruppiert und Komma separiert dargestellt werden.

Beispiel:

ID Name Value
1 A 4
1 B 8
2 C 9

Approach – Ansatz

Durch Verwendung der XPath Funktionen lässt sich etwas kreatives erreichen…

Solution – Lösung

CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT)

INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)

SELECT 
  [ID],
  STUFF((
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
  ,1,2,'') AS NameValues
FROM #YourTable Results
GROUP BY ID

DROP TABLE #YourTable