Showing posts with label TSQL. Show all posts
Showing posts with label TSQL. Show all posts

Monday, February 29, 2016

How to turn off IntelliSense in SQL Server Management Studio

IntelliSense in SQL Server Management Studio is beneficial to some, but irritating to others. For me, when I type out a line of simple code, IntelliSense will spam me with suggestions and actually cause my script to become gibberish if I ignore the suggestions. The suggestions will automatically be selected if I type too fast and don’t hit the escape key every time a seemingly meaningless IntelliSense option is selected. I will note that in SQL 2014 IntelliSense has become better, and I do use it now; however, while working in 2008R2 it was a major PIA and I always disabled it. Here is the way to turn it off, for good, without having to hit the IntelliSense Button in the SQL Editor Toolbar every time you load SQL.

IntelliSense Button in the SQL Editor Toolbar



Turn off IntelliSense


·         From SSMS go to the Tools Menu, select Options

·         Under Text Editor, Transact-SQL, select IntelliSense

·         If Enable IntelliSense is selected, clear the checkbox and hit OK.

Tuesday, February 23, 2016

Using INTERSECT and EXCEPT to compare records

I was asked for a simple way to compare two tables that should be identical and have the same schema. I provided the following scripts to show records that are identical (Intersect) and different (Except):

IF OBJECT_ID(N'dbo.test1') IS NOT NULL
    
DROP TABLE test1
CREATE TABLE
dbo.test1 (name VARCHAR(20), dob DATETIME)

IF
OBJECT_ID(N'dbo.test2') IS NOT NULL
    
DROP TABLE test2
CREATE TABLE
dbo.test2 (name VARCHAR(20), dob DATETIME)

INSERT INTO
test1 (name, dob)
        
VALUES ('Fred','20010102')
INSERT INTO
test1 (name, dob)
        
VALUES ('Fred1','20010103')
INSERT INTO
test1 (name, dob)
        
VALUES ('Fred2','20010104')
INSERT INTO
test1 (name, dob)
        
VALUES ('Fred3','20010105')
INSERT INTO
test1 (name, dob)
        
VALUES ('Fred4','20010106')
INSERT INTO
test1 (name, dob)
        
VALUES ('Fred5','20010107')
INSERT INTO
test2 (name, dob)
        
VALUES ('Fred','20010102')
INSERT INTO
test2 (name, dob)
        
VALUES ('Fred2','20010104')
INSERT INTO
test2 (name, dob)
        
VALUES ('Fred3','20010105')
INSERT INTO
test2 (name, dob)
        
VALUES ('Fred7','20010106')
INSERT INTO
test2 (name, dob)
        
VALUES ('Fred5','20010107')
    

--exist and are the same in both tables test 1, not in test 2

SELECT
name, dob
FROM dbo.test1
INTERSECT
SELECT
name, dob
FROM dbo.test2

--exists in test 1, does not exist in test 2

SELECT
name, dob
FROM dbo.test1
EXCEPT
SELECT
name, dob
FROM dbo.test2

--exists in test 2, does not exist in test 1

SELECT
name, dob
FROM dbo.test2
EXCEPT
SELECT
name, dob
FROM dbo.test1


As you can see by running the script above, intersect shows values from the first query where there are identical record matches in the second query. Except shows values in the first query where there are No identical record matches in the second query. Additional benefit is that it also includes null values in the comparison, you do not get the same functionality with null values on joins (when you just enter the column names) from 2 tables (without adding specific null handling).
 

Thursday, January 17, 2013

Make a SQL Server Shortcut to Change Database Connections

In SSMS, to change databases most people do one of the following:
1. Click the Change Connection toolbar button
2. Right click anywhere in the query pane -> Connection -> Change Connection
3. Go to the query menu -> Connection -> Change Connection (Alt+Q, C, H)

The change connection menu button actually does have a shortcut key predefined (Alt+H); however this action has a lower priority than the (Alt+H) shortcut for the Help Menu. Thanks Microsoft! I'll show you how to enable this the Change Connection action using (Alt+G).

The work around is actually quite simple, but it is not very intuitive.
  • Right click anywhere on the toolbar and select Customize
  • Ignore (but don't close this yet) the Customize window that pops up
  • Right Click on the Change Connection toolbar button and select "Image & Text"
    • This enables the hotkey to be use inside the query window but you can not activate it yet because Help Menu shortcut (Alt + H) still has precedence.
  • Right Click on the Change Connection toolbar button again
  • Change the Name field from "C&hange Connection..." to "Chan&ge Connection..."
  • Close the Customize window that popped up earlier.
Now you can use the Alt + G keyboard shortcut to change connections.

Thursday, August 11, 2011

Search Columns, Stored Procedures, or Tables using Dynamic SQL

I wanted to share the script I created to help Analysts and DBA's easily identify where a particular column, table, or keyword is used within a particular instance.


DECLARE @Dynamic_SQL VARCHAR(MAX)
DECLARE @SSQL VARCHAR(MAX)
DECLARE @DB_NAME VARCHAR(256)
DECLARE @SearchParam VARCHAR(256)
SET @SearchParam = 'ENTER KEYWORD HERE'

--REMOVE COMMENT FROM ONE OBJECT YOU WANT TO SEARCH
--Table Name Search
--set @Dynamic_SQL = 'select ''[dbname]'' database_name, name, null [col] from [dbname].dbo.sysobjects where xtype=''u'' and name like ''%'+@SearchParam+'%'''

--Stored Procedure Dependency Search
--set @Dynamic_SQL = 'use [dbname];select ''[dbname]'' database_name, Name, null [col] FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE ''%'+@SearchParam+'%'''

--Column Name Search
--set @Dynamic_SQL = 'select ''[dbname]'' database_name, so.name, sc.name [col] from [dbname].dbo.sysobjects so inner join [dbname].dbo.syscolumns sc on so.id = sc.id where so.xtype=''u'' and so.name like ''%%'' and sc.name like ''%'+@SearchParam+'%'''

CREATE TABLE #Results (dbname VARCHAR(256), [name] VARCHAR(MAX), col VARCHAR(MAX))

--GET DB LIST
SELECT [name]
INTO #DBNAME
FROM MASTER.dbo.sysdatabases
WHERE [name] NOT IN('master','tempdb','model','msdb')

DECLARE Cur_DB CURSOR FOR SELECT [name] FROM #DBNAME
OPEN Cur_DB
FETCH Next FROM Cur_DB INTO @DB_NAME

WHILE @@FETCH_STATUS = 0 BEGIN
   SET
@SSQL = REPLACE(@Dynamic_SQL,'dbname',@DB_Name)
  
--print @SSQL
  
BEGIN TRY
      
INSERT INTO #Results (dbname, [name], [col])
      
EXEC(@SSQL)
  
END TRY
  
BEGIN CATCH
      
IF @@TRANCOUNT > 0
  
ROLLBACK
   END
CATCH

  
FETCH Next FROM Cur_DB INTO @DB_NAME

END
CLOSE
Cur_DB
DEALLOCATE Cur_DB
DROP TABLE #DBNAME

SELECT dbname, [name], col FROM #Results
ORDER BY dbname, [name], col

DROP TABLE #Results