Archive for the ‘SQL Server’ Category
CREATE FUNCTION [dbo].[DateOnly] (@DATE DATETIME)
RETURNS DATETIME
BEGIN
RETURN DATEADD(d, DATEDIFF(d, 0, @DATE), 0)
END
Posted in Code, Database, MSSQL2005, MSSQL2008, Quick Tips, Software Development, SQL Server, TSQL | No Comments »
CREATE FUNCTION [dbo].[LastDayOfTheMonth] (@DATE DATETIME )
RETURNS DATETIME
BEGIN
RETURN dateadd(ms, -3, DATEADD(mm, DATEDIFF(m, 0, @DATE) + 1, 0))
END
Posted in Code, MSSQL2005, MSSQL2008, Quick Tips, SQL Server, TSQL | No Comments »
If you like to know what’s changing on your SQL Server then the following code creates an audit table and the associated trigger for logging the changes
The Audit Object Table
CREATE TABLE [dbo].[AuditObjects](
[EventID] [INT] IDENTITY(1,1) NOT NULL
,[EventData] [xml] NULL
PRIMARY KEY CLUSTERED (
[EventID] ASC
) WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
And the associated Trigger
CREATE TRIGGER [TriggerAuditObjects]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
INSERT INTO [dbo].[AuditObjects](EventData)
SELECT EVENTDATA()
GO
ENABLE TRIGGER [TriggerAuditObjects] ON DATABASE
You can now use xpath queries to analyse the data
Posted in Code, iPhone, MSSQL2005, MSSQL2008, Objective-C, Software Development, SQL Server, TSQL | 1 Comment »
Ever had the need to search stored procedures to find redundant tables or text that needs replacing or re-factoring ?
Here’s a script to help (Sorry for the cursor, I’m sad with myself for using it
)
-- Search string
DECLARE @SearchString nvarchar(50)
SET @SearchString = 'Search String'
-- Required Declares
DECLARE @getdbname sysname
DECLARE @sqlstm nvarchar(1000)
DECLARE SeachCursor cursor FOR
-- Get All The Names into the SeachCursor
SELECT '['+name+']' FROM [master].[dbo].[sysdatabases] ORDER BY name
OPEN SeachCursor
-- Add the Search Pattern
SET @SearchString = '%' + @SearchString + '%'
--Get the first Name
FETCH NEXT FROM SeachCursor INTO @getdbname
WHILE @@FETCH_STATUS=0
BEGIN
--set the statement to define the search condition, with variables
SET @sqlstm = '
SELECT [SP].[Specific_Catalog] AS [Database_Name], [SP].[Routine_Name] AS [Stored Procedure Name],[SP].[Routine_Definition] AS [Routine_Definition]
FROM '+ @getdbname+'.[Information_Schema].[Routines] AS [SP]
WHERE PatIndex('+''''+@SearchString+''''+', [Routine_Definition]) > 0'
--Execute the Query
EXEC (@sqlstm)
FETCH NEXT FROM SeachCursor INTO @getdbname
END
--Close the Cursor and Deallocate it from memory
CLOSE SeachCursor
DEALLOCATE SeachCursor
Posted in Code, Database, iPhone, MSSQL2005, MSSQL2008, Objective-C, Quick Tips, SQL Server, TSQL | No Comments »
If you get the error in the SQL 2008 Management Studio :
“Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created.”
You can enable changes inside the Microsoft SQL Server Management Studio by going to ‘Tools|Options|Designers’ then unchecking the ‘Prevent saving changes that require table re-creation’ option
Posted in Database, MSSQL2008, SQL Server, TSQL | 15 Comments »
You can use TSQL to Count Number Of Stored Procedures, Views, Tables or Functions in a Database by using the Database INFORMATION_SCHEMA view
/* Count Number Of Tables In A Database */
SELECT COUNT(*) AS TABLE_COUNT FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
/* Count Number Of Views In A Database */
SELECT COUNT(*) AS VIEW_COUNT FROM INFORMATION_SCHEMA.VIEWS
/* Count Number Of Stored Procedures In A Database */
SELECT COUNT(*) AS PROCEDURE_COUNT FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE'
/* Count Number Of Functions In A Database */
SELECT COUNT(*) AS FUNCTION_COUNT FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'
The same methodology can be used to query for information :
/* Select Table Information For A Database */
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
/* Select View Information For A Database */
SELECT * FROM INFORMATION_SCHEMA.VIEWS
/* Select Stored Procedure Information For A Database */
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE'
/* Select Function Information For A Database */
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION'
Posted in Code, Database, MSSQL2005, MSSQL2008, Software Development, SQL Server, TSQL | 20 Comments »
DISTINCT v GROUP BY
A DISTINCT and GROUP BY usually generate the same query plan, so performance should be very simular or the same, if you only need to remove the dulicates then DISTINCT is easier to understand in the query, if you have a more complex query it may be worth running both and studdying the execution plan to see if your specific example wins
Posted in Code, Database, MSSQL2005, MSSQL2008, Software Development, SQL Server, TSQL | 1 Comment »
Take a database offline with TSQL:
– Kill All Other Users Processes And Set The Database To Single User Mode
ALTER DATABASE AdventureWorks
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
– Take Offline
EXEC sp_dboption ‘AdventureWorks’, ‘offline’, ‘TRUE’
And restoring the database back to online with TSQL:
– Allow Users Back In By Setting Multi User Mode On
ALTER DATABASE AdventureWorks SET MULTI_USER
– Bring Back Online
EXEC sp_dboption ‘AdventureWorks’, ‘offline’, ‘FALSE’
Posted in Code, Database, MSSQL2005, Software Development, SQL Server, TSQL | 1 Comment »
Useful code if you wish to launch an external application:
System.Diagnostics.Process.Start(@"C:\program files\microsoft office\word.exe", @"C:\MyWordDocument.docx");
Posted in .NET, C#, Code, MSSQL2005, Software Development | No Comments »
Here is a usefull TSQL Script for checking if a database exists :
– Check if the Database Exists
DECLARE @DatabaseCount AS int
SELECT @DatabaseCount=COUNT(*) FROM master.dbo.sysdatabases WHERE name=‘master’
SELECT @DatabaseCount AS [DatabaseCount]
Posted in Code, Database, MSSQL2005, Software Development, SQL Server, TSQL | No Comments »