Thursday, June 12, 2014
NET : Create Dynamic SqlCommand Parameters
Wednesday, April 16, 2014
SQL : Get Last Update TimeStampe For A Table
Tuesday, July 2, 2013
SQL Server : Using Quotes In Linked Server Queries
Friday, May 31, 2013
SQL Server : Simple XQuery Using .nodes() With CROSS APPLY
Friday, May 17, 2013
SQL Server : Using $partition Function
Recently, I needed to validate date-range value on each partition on a partitioned table. To do this, I utilized the SQL Server "$Partition" function. Per MSDN, "$Partition returns the partition number into which a set of partitioning column values would be mapped for any specified partition function."
The syntax is:
[ database_name. ] $PARTITION.partition_function_name(expression)
This handy function can also be used to obtain column information, row counts, and other information you might want to know per partition:
--STEP ONE:
--Get the name of your partition function:
SELECT NAME FROM SYS.partition_functions
NAME |
TableAPartitionFunc |
--STEP TWO:
--Get the name of the column from which your table is partitioned
SELECT c.name AS PartitionedColumnName
FROM sys.tables t
JOIN sys.indexes i
ON (i.object_id = t.object_id
AND i.index_id < 2)
JOIN sys.index_columns ic
ON(ic.partition_ordinal > 0
AND ic.index_id = i.index_id and ic.object_id = t.object_id)
JOIN sys.columns c
ON (c.object_id = ic.object_id
AND c.column_id = ic.column_id)
WHERE t.object_id = LOWER(object_id('yourtablename'))
PartitionedColumnName |
DatePort |
--STEP THREE:
--Use acquired data to query your partition values:
SELECT DISTINCT $partition.TableAPartitionFunc(DatePort) AS PartitionNumber,
CONVERT(VARCHAR(8), DatePort, 1) AS RangedDate, 'yourtablename' AS PartitionedTable
from yourtablename
ORDER BY $partition. TableAPartitionFunc(DatePort)
PartitionNumber | RangedDate | PartitionedTable |
1 | 5/13/2013 | yourtablename |
2 | 5/14/2013 | yourtablename |
3 | 5/15/2013 | yourtablename |
4 | 5/16/2013 | yourtablename |
Monday, April 15, 2013
SQL Server : Difference Between SP_SEND_DBMAIL & XP_SENDMAIL
Friday, March 15, 2013
SQL Server : Query For A Quick Overview Of Your Partitions
-- =============================================
-- This is a basic query intended to provide
-- a quick look at partition info.
-- =============================================
SELECT b.name as 'table_name', a.partition_number,
a.[rows] as 'row_count', a.partition_id,
a.object_id, a.hobt_id,
b.schema_id, c.name as 'schema_name',
a.index_id, b.create_date, b.modify_date
FROM sys.partitions AS a INNER JOIN
sys.objects AS b ON a.object_id = b.object_id
INNER JOIN sys.schemas AS c On c.schema_id = b.schema_id
WHERE LOWER(b.name) = 'yourPartitionedTableName'
--pull only first index for a simpler view
and a.index_id < 2
ORDER BY b.name, partition_number;
-- =============================================
--Helpful info for a deeper dive
-- =============================================
SELECT * FROM SYS.partition_range_values ;
SELECT * from sys.partitions;
SELECT * FROM SYS.partition_functions;
SELECT * FROM sys.partition_schemes;
SELECT * from sys.schemas;
SELECT * FROM sys.filegroups;
--query sys.partitions to view and verify that the table contains partitions as expected
SELECT * FROM sys.partitions where OBJECT_NAME(Object_Id)='yourPartitionedTableName';
SELECT * FROM sys.objects where OBJECT_NAME(Object_Id)='yourPartitionedTableName';
SQL Server : Query Definition of an Object
-- Another way to query the definition of an object:
SELECT OBJECT_NAME(object_id), *
FROM sys.sql_modules
WHERE LOWER(DEFINITION) LIKE '%tbl%'
Thursday, January 31, 2013
SQL: Introduction To Partitioning
If your database has a very large table, you can "partition" this large table onto separate "filegroups." Filegroups are special types of files that allows a user to divide data onto different disks for the purpose of optimizing query performance and maintenance operations. For example, say you have a tall file cabinet where you keep lists of customer names. As the number of files grow, the longer it takes to locate any given file. Database tables operate on the same principle.
The first thing you will need to do when planning out a partitioned table is to decide how you will divide the table up. As with our file cabinet example, we might decide to create one file cabinet where last names begin with A – F, another cabinet for files G – N, and another for files O – Z. Likewise, our table might also be divided up using last names as a way to organize. You can see how faster it would be to locate the last name "Jones" in one of three cabinets instead of a giant cabinet.
As business changes and data grows, partitioning can become more complicated; however, the example above does provide a basic understanding as to how partitioning can save time and resources.
Sunday, December 9, 2012
SQL : "Synonym Swap" Design Pattern
Frequently, I get asked to explain a database design pattern involving "synonym-swapping." Though I'm getting better at clarifying this approach, it is still often difficult for the business-side folks to really understand. I will now attempt to write a post to direct these people so that they do not have to listen to my ramblings.
First, database synonyms are a type of "alias", or alternate name for a table, view, sequence, or other schema objects in a database. Some people refer to them as "pointers" because sometimes a synonym might point to one table and at another time it will point to a different table.
Synonyms are great ways of referencing one or more tables in your database. You can reference one or more tables by a single name. For example, say you had table that contained orders for your company. Your orders table has millions of rows and needs to be accessed 24-hours a day. However, what if updating the data in the table takes a couple of hours? Also, what if maintenance takes a few hours? Your users do not have the time to wait or suffer through a performance degradation. What will you do?
1. Create two tables that are exact duplicates of each other ("ORDERS_TABLE_A", "ORDERS_TABLE_B"). Then create two synonyms, "Orders_Staging","Orders." The "Orders" synonym will ALWAYS point to the table with the latest data.
2. Say "Orders" is currently pointing to "ORDERS_TABLE_A" but the data needs refreshed. You will update "ORDERS_TABLE_B" then "swap" the synonym to point to "ORDERS_TABLE_B." The time it takes to toggle a synonym between two tables is almost a split second. If something goes awry during the data refresh, then the synonyms never get swapped and the user has no interruption of service either way.
Synonyms are a very useful tool as it means that in your application does not have to worry about changing the table names from "ORDERS_TABLE_A" to "ORDERS_TABLE_B" and vice versa every time you do a refresh.
As you can see Synonyms are very useful tools for using aliases and can help when you have processes that involve building new tables to the side of existing ones for performance reasons.
MSDN Synonyms
An Even Better Explanation
SQL: Introduction to Databases
SIZE
Data gets big very quickly. In Excel 2007, a user can enter 16,384 columns and 1,048,576 rows. This seems like allot of data! Your computer very well might crash if you tried to open an Excel spreadsheet containing a million rows, not to mention the amount of hard-drive space this would take!
A database is a dedicated piece of software created specifically for large amounts of data. Usually, a database will run on a computer that contains only databases.
REPORTING
Businesses operate on data. A business might use an Excel spreadsheet to keep track of the cost of office supplies. Another business might have to keep track a chain of store inventories s across the country and what inventory is in each store. They also might want to know what product sells more in the Midwest as opposed to the West Coast. Data is useless without a means to make sense of it all. Databases provide such means in a cost-effective and efficient manner. With proper setup, a query into a database can search through millions of rows to find the one piece of information that you want and do it in a matter of milliseconds.
Databases can be as simple or as complex as you can imagine. From cell phones to ATMs -- all are dependent on data systems. The world runs on data. Now you know what I am referring to when I talk about databases.
Thursday, November 1, 2012
SQL Server : Use XQuery On XML Data Types
Sunday, September 16, 2012
SQL Server: Get RowCount Of All Tables Without the Overhead
Tuesday, August 21, 2012
SQL Server: Get First and Last Days Of Month
--get the last day of last month
--get the last day of current month
Monday, August 20, 2012
SQL Server : Check If Index Exists On Schema
--or