Tag Archive for tsql

TSQL Function and Check Constraint to Ensure that a Parent Value is Present in the Table

ALTER TABLE [dbo].[Message]  WITH CHECK ADD  CONSTRAINT [CK_Message] CHECK  (([InReplyToId] IS NULL OR [dbo].[CheckInReplyToMessageId]([InReplyToId])>=(0)))
GO
ALTER TABLE [dbo].[Message] CHECK CONSTRAINT [CK_Message]

CREATE FUNCTION [dbo].[CheckInReplyToMessageId]
(
@MessageId BigInt
)
RETURNS bit
AS
BEGIN
DECLARE @RetVal bit

SET @RetVal = (SELECT MessageId
FROM Message
WHERE MessageId = @MessageId)

RETURN isnull(@RetVal, 0)

END

source

sp_ColDefinition or writing upsert SP in a snap

use master
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp__ColDefinition]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[sp__ColDefinition]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fn_SizePrecScale]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fn_SizePrecScale]
GO

CREATE function fn_SizePrecScale(
@Type varchar(50),
@Length int,
@Prec int,
@Scale int)
returns varchar(100)
as
begin
DECLARE @RC varchar(100)

IF @Type in ('smalldatetime','datatime','text','image','bit','ntext','uniqueidentifier','bigint','int','smallint','tinyint','money','smallmoney')
SET @RC = @Type
ELSE IF @Type in('decimal','numeric')
SET @RC = @Type + '(' + cast(@Length as varchar) + ') [' + cast(@Prec as varchar) + ',' + cast(@Scale as varchar) + ']'
ELSE
SET @RC = @Type + '(' + cast(@Length as varchar) + ')'

RETURN(@RC)
end

GO
CREATE PROC dbo.sp__ColDefinition
@ObjectName sysname
AS
BEGIN
DECLARE @xtype char(2)

SELECT @xtype = xtype FROM sysobjects WHERE name = @ObjectName

IF @xtype not in('U','FN','V','P')
begin
RAISERROR ('L''objet n''existe pas dans le catalogue', 16, 1)
RETURN
end

IF @xtype in ('U','V')
SELECT
[DECLARE] = '@' + C.name + ' ' + dbo.fn_SizePrecScale(T.name,C.length,C.xprec,C.xscale) + ',',
C.name + ',' AS [INSERT INTO],
'@' + C.name + ',' AS [VALUES],
C.name + ' = @' + C.name + ',' AS [SET],
'@' + C.name + ' = ' + C.name + ',' AS [SELECT]
from sysobjects O, syscolumns C, systypes T
where O.id = C.id and C.xtype = T.xtype
and O.name = @ObjectName and T.xtype = T.xusertype
order by C.colorder
ELSE
SELECT
[DECLARE] = C.name + ' ' + dbo.fn_SizePrecScale(T.name,C.length,C.xprec,C.xscale) + ','
from sysobjects O, syscolumns C, systypes T
where O.id = C.id and C.xtype = T.xtype
and O.name = @ObjectName and T.xtype = T.xusertype
order by C.colorder
END

source

TSQL to Start a Job Programatically

use MSDB
execute SP_Start_job 'JobName'

source

Basic TSQL Cursor Syntax

declare @EntityName as varchar(100)

declare DepNameCursor Cursor FAST_FORWARD
FOR select top 100 MailName from DepNameExt

OPEN DepNameCursor
FETCH NEXT FROM DepNameCursor
INTO @EntityName

WHILE @@Fetch_Status = 0
BEGIN

INSERT INTO [UDC].[dbo].[Entity]
([Name])
VALUES
(@EntityName)

FETCH NEXT FROM DepNameCursor
INTO @EntityName
END

CLOSE DepNameCursor
DEALLOCATE DepNameCursor

source

ASP show a sql table

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Set rst = Server.CreateObject("ADODB.Recordset")
Conn.Open Application("ConnectionString")
Dim temp
Dim i
temp =0
response.write "<table>"
do while not rst.eof
For i = 0 To rst.fields.count - 1
If temp = 0 Then
If i = 0 then response.write "<tr><td></td>"
response.write "<th>" & rst(i).name & "</th>"
If i = rst.fields.count - 1 then response.write "</tr>"
End If
Next
For i = 0 To rst.fields.count - 1
If i = 0 then response.write "<tr><td>" & temp & "</td>"
response.write "<td>" & rst(i)
response.write("</td>")
If i = rst.fields.count - 1 then response.write "</tr>"
Next
temp = temp + 1
rst.movenext
loop
response.write "</table>"
rst.close
set rst=nothing
%>

source

TSQL snippets for snippetsEmu

if !exists('loaded_snippet') || &cp
finish
endif

Snippet $proc IF EXISTS (<CR>SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES<CR>
WHERE ROUTINE_NAME = '<{"name"}>'<CR>
AND ROUTINE_SCHEMA = 'dbo'<CR>AND ROUTINE_TYPE = 'PROCEDURE'<CR><BS>)<CR>
BEGIN<CR>DROP PROCEDURE dbo.<{"name"}><CR>
PRINT 'Dropped dbo.<{"name"}>'<CR>
END<CR>GO<CR><CR>CREATE PROCEDURE dbo.<{"name"}> (<CR>
/*<CR>  Sample calls:<CR>
<BS><Tab>EXEC <{"name"}><CR><BS>*/<CR>)<CR>AS BEGIN<CR>
<Tab>SET NOCOUNT ON<CR><{}><CR>END<CR>GO<CR><CR>IF @@ERROR = 0<CR>
PRINT 'Created dbo.<{"name"}>'<CR><BS>GO<CR>

Snippet $func IF EXISTS (<CR>SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES<CR>
WHERE ROUTINE_NAME = '<{"name"}>'<CR>
AND ROUTINE_SCHEMA = 'dbo'<CR>AND ROUTINE_TYPE = 'FUNCTION'<CR><BS>)<CR>
BEGIN<CR>DROP FUNCTION dbo.<{"name"}><CR>
PRINT 'Dropped dbo.<{"name"}>'<CR>
END<CR>GO<CR><CR>CREATE FUNCTION dbo.<{"name"}> (<CR>
/*<CR>  Sample calls:<CR>
<BS><Tab>SELECT dbo.<{"name"}>()<CR><BS>*/<CR>)<CR>
RETURNS <{"return_type"}><CR>AS BEGIN<CR>
<Tab><{}><CR>END<CR>GO<CR><CR>IF @@ERROR = 0<CR>
PRINT 'Created dbo.<{"name"}>'<CR><BS>GO<CR>

Snippet $view IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = '<{"name"}>') BEGIN<CR>
DROP VIEW dbo.<{"name"}><CR>
PRINT 'Dropped dbo.<{"name"}>'<CR>
END<CR>GO<CR><CR>CREATE VIEW dbo.<{"name"}><CR>AS<CR>
/* Sample calls:<CR>
<Tab>SELECT * FROM <{"name"}><CR><BS>*/<CR><{}><CR>GO<CR>
<CR>IF @@ERROR = 0<CR>
PRINT 'Created dbo.<{"name"}>'<CR><BS>GO<CR>

Snippet $table IF EXISTS (<CR>SELECT 1 FROM INFORMATION_SCHEMA.TABLES<CR>
WHERE TABLE_NAME = '<{"name"}>'
AND TABLE_SCHEMA = 'dbo'<CR><BS>)<CR>BEGIN<CR>
DROP TABLE dbo.<{"name"}><CR>
PRINT 'Dropped dbo.<{"name"}>'<CR>
END<CR>GO<CR><CR>CREATE TABLE dbo.<{"name"}> (<CR>
<{}><CR>)<CR>GO<CR><CR>IF @@ERROR = 0<CR>
PRINT 'Created dbo.<{"name"}>'<CR><BS>GO<CR>

Snippet $sum SUM(<{"field"}>) AS <{"field"}>,<{}>

Snippet $vc varchar(<{"size"}>)<{}>

Snippet $c char(<{"size"}>)<{}>

Snippet $d decimal(<{"size"}>,<{"precision"}>)<{}>

Snippet $tv DECLARE @<{"name"}> table (<CR><{}><CR>)

Snippet $tt CREATE TABLE #<{"name"}> (<CR><{}><CR>)

source

TSQL keyword search

SELECT ROUTINE_NAME, ROUTINE_DEFINITION
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_DEFINITION LIKE '%keyword%'

source

TSQL last second of day

DATEADD(s, -1, DATEADD(d, 1, DATEADD(d, DATEDIFF(d, 0, @date), 0)))

source

TSQL truncate time

DATEADD(d, DATEDIFF(d, 0, @date), 0)

source