External Article

Cursors with SQL 2000 Part 1

This series of articles will examine the purposes, uses, and optimization of cursors in SQL 2000. SQL languages are designed so groups of records, or sets, can be manipulated easily and quickly. The speed at which groups of data can be altered, updated and deleted, demonstrates why working with sets is the preferred method. However, there are places where cursors are a better choice.

SQLServerCentral Article

SQL Server 2005 DBCC Command Quick Reference

The next version of SQL Server due in 2005 will bring about many changes in how it works, with .NET, the CLR integration, Integration Services, and much more. Many of us are looking to get a jump on the product and see where these changes might affect our scripts and environments. Jon Reade has started the work in decoding the new DBCC commands, which ones work and which don't. Since there's a limited amount of documentation for the Beta product, read about his detective work and send him off an

SQLServerCentral Article

TiVo for DBAs!!!

SQLServerCentral.com is all about learning. Our goal has been to build a community where we all teach each other how to become more proficient with SQL Server. Most of our content to date has been written articles that show you how to do something. Well we have a a better idea, maybe. Check out our new video HOWTO series.

Technical Article

Optimizing Your SQL Code with SQL Server 2005

A common complaint of database administrators (DBAs) is that performance bottlenecks are not among those problems that one can fix "by just throwing hardware at it." Thus, database servers must provide tools and techniques to help administrators address this issue. On that aspect, SQL Server 2005 does not disappoint.

Technical Article

Easy Package Configuration

One of the age old problems in DTS is moving packages between your development, test and production environments. Typically a series of manual edits needs to be done to all the packages to make sure that all the connection objects are pointing to the correct physical servers. This is time consuming and gives rise to the possibility of human error, particularly if the solution incorporates many DTS packages. Many companies have provided their own custom solutions for managing this problem but these are still workarounds for a problem that is inherently DTS's.

SQLServerCentral Article

Review - SQLPackager

Deploying a SQL Server database with your software can be tricky. It's easy to forget something that you added to development when trying to script out or detach and copy a database. And there's the whole problem of integrating the installation or upgrade into your main installation routine. New author Mark Vermeulen takes a look at Red Gate's SQLPackager, designed to make the job of deploying a database much easier.

Blogs

In-Person CISA Training – April 13-16, 2026

By

I will be leading an in-person Certified Information Systems Auditor (CISA) exam prep class...

EightKB 2026

By

EightKB is back again for 2026! The biggest online SQL Server internals conference is...

The FinOps Lifecycle: From Budgeting to Reporting

By

Working in DevOps long enough teaches you two universal truths: That’s exactly why I...

Read the latest Blogs

Forums

Fun with JSON II

By Steve Jones - SSC Editor

Comments posted to this topic are about the item Fun with JSON II

Changing Data Types

By Steve Jones - SSC Editor

Comments posted to this topic are about the item Changing Data Types

Answering Questions On Dropped Columns

By Cláudio Silva

Comments posted to this topic are about the item Answering Questions On Dropped Columns

Visit the forum

Question of the Day

Fun with JSON II

I have some data in a table:

CREATE TABLE #test_data
(
    id INT PRIMARY KEY,
    name VARCHAR(100),
    birth_date DATE
);

-- Step 2: Insert rows  
INSERT INTO #test_data
VALUES
(1, 'Olivia', '2025-01-05'),
(2, 'Emma', '2025-03-02'),
(3, 'Liam', '2025-11-15'),
(4, 'Noah', '2025-12-22');
If I run this query, how many rows are returned?
SELECT t1.[key] AS row,
       t2.*
FROM OPENJSON(
     (
         SELECT t.* FROM #test_data AS t FOR JSON PATH
     )
             ) t1
    CROSS APPLY OPENJSON(t1.value) t2;

See possible answers