Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

Rename Database

USE master
GO
EXEC sp_dboption Fox8, 'Single User', True
GO
-- if this command fails, use:
-- alter database Fox8 set single_user with rollback IMMEDIATE
EXEC sp_renamedb 'Fox8', 'Fox8NotUnicode'
GO
EXEC sp_dboption Fox8NotUnicode, 'Single User', False
GO

sp_dboption 'Single User' command failed

Problem:
USE master
GO

EXEC sp_dboption DBNAME, 'Single User', True
GO

Msg 5070, Level 16, State 2, Line 1
Database state cannot be changed while other users are using the database 'DBNAME'
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
sp_dboption command failed.


Solution:
Use this command:
alter database DBNAME set single_user with rollback IMMEDIATE
GO

Converting int to datetime

Converting int to datetime nean to add days as the int number to 1900-01-01 00:00:00.
What nean:
cast(37947 as datetime) = dateadd(day, 37947, '19000101 00:00:00') 
[=20031124 00:00:00]
and:
select cast(0 as datetime) = 1900-01-01 00:00:00

Converting datetime to ing will return the number of the days since 1900-01-01 00:00:00:
select cast(cast('20031124 00:00:00' as datetime) as int) = 37947

BTW:
select cast(37947.5 as datetime) will return 2003-11-24 12:00:00.000

Time convertion: EST and EDT to GMT

EST: Eastern Time Zone is the Eastern Time Zone of the United States of America (USA) and Canada
GMT = EST+5
EDT: Atlantic Daylight Time is the Atlantic Time Zone of the United States of America (USA) and Canada
GMT = EST+4

Mssql 2008 R2 Restore error: File '.ndf' is claimed by (4) and (3). The WITH MOVE clause can be used to relocate one or more files

Mssql 2008 R2 Restore Error: 
File '.ndf' is claimed by (4) and (3). The WITH MOVE clause can be used to relocate one or more files.

Solutions:
1.
Restore behavior for new DB was changed in SQL 2008:
In 2005, we can create new (empty) DB and restore from bak file to the new DB.
In 2008, Restore from bak file to new DB (that was not created yet).
(Right click on Databases-->Restore Database...)






















Another possible causes of the problem can be (not only for MSSQL 2008):
2.
 Different number of files between the new DB and the source DB.

3.
Attempting to use a file for more than one purpose.

Find text in columns content

Find text in columns content of the tables in the DB.
If you want to replace the text with another text - remove remarks from the remarked lines.


begin tran

SET NOCOUNT ON 

DECLARE @stringToFind VARCHAR(100) 
--DECLARE @stringToReplace VARCHAR(100) 
DECLARE @schema sysname 
DECLARE @table sysname 
DECLARE @count INT 
DECLARE @sqlCommand VARCHAR(8000) 
DECLARE @where VARCHAR(8000) 
DECLARE @columnName sysname 
DECLARE @object_id INT 
                     
SET @stringToFind = 'admin' 
--SET @stringToReplace = 'Jones' 
                        
DECLARE TAB_CURSOR CURSOR  FOR 
SELECT   B.NAME      AS SCHEMANAME, 
         A.NAME      AS TABLENAME, 
         A.OBJECT_ID 
FROM     sys.objects A 
         INNER JOIN sys.schemas B 
           ON A.SCHEMA_ID = B.SCHEMA_ID 
WHERE    TYPE = 'U' 
ORDER BY 1 
          
OPEN TAB_CURSOR 

FETCH NEXT FROM TAB_CURSOR 
INTO @schema, 
     @table, 
     @object_id 
      
WHILE @@FETCH_STATUS = 0 
  BEGIN 
    DECLARE COL_CURSOR CURSOR FOR 
    SELECT A.NAME 
    FROM   sys.columns A 
           INNER JOIN sys.types B 
             ON A.SYSTEM_TYPE_ID = B.SYSTEM_TYPE_ID 
    WHERE  OBJECT_ID = @object_id 
           AND IS_COMPUTED = 0 
           AND B.NAME IN ('char','nchar','nvarchar','varchar','text','ntext') 

    OPEN COL_CURSOR 
     
    FETCH NEXT FROM COL_CURSOR 
    INTO @columnName 
     
    WHILE @@FETCH_STATUS = 0 
      BEGIN 

print @schema + '.' + @table + '.' + @columnName

----------------------------------------------------
-- only search:
        EXEC (' if exists (select [' + @columnName + '] from [' + @schema + '].[' + @table + '] where [' + @columnName + '] like ''%' + @stringToFind + '%'') ' +
'select [' + @columnName + '] as ' + @schema + '_' + @table + '_' + @columnName +
' from [' + @schema + '].[' + @table + '] where [' + @columnName + '] like ''%' + @stringToFind + '%''')
----------------------------------------------------
-- search/replace:
        --SET @sqlCommand = 'UPDATE ' + @schema + '.' + @table + ' SET [' + @columnName + '] = REPLACE(convert(nvarchar(max),[' + @columnName + ']),''' + @stringToFind + ''',''' + @stringToReplace + ''')' 
        --SET @where = ' WHERE [' + @columnName + '] LIKE ''%' + @stringToFind + '%''' 
        --EXEC( @sqlCommand + @where) 

        --SET @count = @@ROWCOUNT 
        --IF @count > 0 
        --BEGIN 
            --PRINT @sqlCommand + @where 
            --PRINT 'Updated: ' + CONVERT(VARCHAR(10),@count) 
--print @schema + '.' + @table + '.' + @columnName
        --END 

----------------------------------------------------
         
        FETCH NEXT FROM COL_CURSOR 
        INTO @columnName 
      END 
     
    CLOSE COL_CURSOR 
    DEALLOCATE COL_CURSOR 
     
    FETCH NEXT FROM TAB_CURSOR 
    INTO @schema, 
         @table, 
         @object_id 
  END 
   
CLOSE TAB_CURSOR 
DEALLOCATE TAB_CURSOR

rollback tran

Allows/Don't allow explicit values to be inserted into identity column

-- allow:
set identity_insert dbo.TableA on
-- don't allow:
set identity_insert dbo.TableA off