24 November 2011

SQL SERVER – @@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT – Retrieve Last Inserted Identity of Record

SELECT @@IDENTITY

It returns the last IDENTITY value produced on a connection, regardless of the table that produced the value, and regardless of the scope of the statement that produced the value. @@IDENTITY will return the last identity value entered into a table in your current session. While @@IDENTITY is limited to the current session, it is not limited to the current scope. If you have a trigger on a table that causes an identity to be created in another table, you will get the identity that was created last, even if it was the trigger that created it.

SELECT SCOPE_IDENTITY()

It returns the last IDENTITY value produced on a connection and by a statement in the same scope, regardless of the table that produced the value. SCOPE_IDENTITY(), like @@IDENTITY, will return the last identity value created in the current session, but it will also limit it to your current scope as well. In other words, it will return the last identity value that you explicitly created, rather than any identity that was created by a trigger or a user defined function.

SELECT IDENT_CURRENT('tablename')

It returns the last IDENTITY value produced in a table, regardless of the connection that created the value, and regardless of the scope of the statement that produced the value. IDENT_CURRENT is not limited by scope and session; it is limited to a specified table. IDENT_CURRENT returns the identity value generated for a specific table in any session and any scope. To avoid the potential problems associated with adding a trigger later on, always use SCOPE_IDENTITY() to return the identity of the recently added row in your T SQL Statement or Stored Procedure.

Trovato qui.

Nota:

se si usa con un ADODB.Recordset, con un'istruzione del genere:
INSERT INTO DataSheet(databaseUserID, currentTimestamp)
VALUES (1, CURRENT_TIMESTAMP);
SELECT SCOPE_IDENTITY()
bisogna aprire il recordset con
Set rs = rs.NextRecordset
perché
You are executing two statements so you will get two results back. the recordset object can only hold one result at a time - to get the other result you need to use the NextRecordset method.

Trovato qui.

16 November 2011

Eliminare tutti gli oggetti di un database / Delete all database objects

Script che genera lo script per eliminare tutti gli oggetti di un database:
This script removes all database objects:
SET NOCOUNT ON

SELECT '-- SCRIPT PER ELIMINARE TUTTI GLI OGGETTI DI UN DB --' = ''

-- procedures
union SELECT '/*A*/ DROP PROCEDURE [' + name + ']'
from sys.procedures

UNION

-- check constraints
SELECT '/*B*/ ALTER TABLE [' + object_name( parent_object_id ) + '] DROP CONSTRAINT [' + name + ']'
from sys.check_constraints

UNION

-- functions
SELECT '/*C*/ DROP FUNCTION [' + name + ']'
from sys.objects
where type in ( 'FN', 'IF', 'TF' )

UNION

-- views
SELECT '/*D*/ DROP VIEW [' + name + ']'
from sys.views

UNION

-- foreign keys
SELECT '/*E*/ ALTER TABLE [' + object_name( parent_object_id ) + '] DROP CONSTRAINT [' + name + ']'
from sys.foreign_keys

UNION

-- tables
SELECT '/*F*/ DROP TABLE [' + name + ']'
from sys.tables

UNION

-- user defined types
SELECT '/*G*/ DROP TYPE [' + name + ']'
from sys.types
where is_user_defined = 1
Testato su SQL 2008.

07 November 2011

Ottenere la versione del file in esecuzione

Un po' pedestre:
Dim fullPath As String = ""
fullPath &= My.Application.Info.DirectoryPath & "\" &
fullPath &= My.Application.Info.AssemblyName & ".exe"

Return FileVersionInfo.GetVersionInfo(fullPath).FileVersion
Migliorabile la parte per recuperare il fullPath dell'assembly corrente.

03 November 2011

VB.NET and C# Comparison

Scarica il PDF! =)

Trovato qui.