Showing posts with label SQL Server. Show all posts
Showing posts with label SQL Server. Show all posts

Wednesday, May 15, 2013

Convert a SQL query result table to an HTML table for email

declare @body varchar(max)

set @body = cast( (
select td = dbtable + '' + cast( entities as varchar(30) ) + '' + cast( rows as varchar(30) )
from (
select dbtable = object_name( object_id ),
entities = count( distinct name ),
rows = count( * )
from sys.columns
group by object_name( object_id )
) as d
for xml path( 'tr' ), type ) as varchar(max) )

set @body = '' + ' ' + replace( replace( @body, '<', '<' ), '>', '>' ) + '
Database TableEntity CountTotal Rows
'

print @body

 <html>
   <head >
   </head>
   <body>
   <body>
 <html>

http://stackoverflow.com/questions/7070053/convert-a-sql-query-result-table-to-an-html-table-for-email

SQL Cast and Convert Date

Using SQL Server 2008
This first option of removing the date uses the SQL Server 2008 method. This will return only the date or only the time:

-- remove the time
SELECT CAST(GETDATE() AS DATE) -- 2009-07-12
-- remove the date
SELECT CAST(GETDATE() AS TIME) -- 08:46:25.8130000
If you’re not working with SQL Server 2008, you have to improvise.

Cast Date With No Time Using Floor
This example removes the time from the date time by setting it to the beginning of the day.

-- Get the current day with no time
-- 2009-06-29 00:00:00.000
SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS datetime)

-- Get the next day
-- 2009-06-30 00:00:00.000
SELECT CAST(CEILING (CAST(GETDATE() AS FLOAT)) AS datetime)
Cast Date with No Time Using Convert
Using convert you can remove the time for display purposes, usually for reporting or the front end.

-- Month first
SELECT CONVERT(VARCHAR(12),GETDATE(), 101) -- 06/29/2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 110) -- 06-29-2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 100) -- Jun 29 2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 107) -- Jun 29, 2009

-- Year first
SELECT CONVERT(VARCHAR(12),GETDATE(), 102) -- 2009.06.29
SELECT CONVERT(VARCHAR(12),GETDATE(), 111) -- 2009/06/29
SELECT CONVERT(VARCHAR(12),GETDATE(), 112) -- 20090629

-- Day first
SELECT CONVERT(VARCHAR(12),GETDATE(), 103) -- 29/06/2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 105) -- 29-06-2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 104) -- 29.06.2009
SELECT CONVERT(VARCHAR(12),GETDATE(), 106) -- 29 Jun 2009

-- Time only
SELECT CONVERT(VARCHAR(12),GETDATE(), 108) -- 07:26:16
SELECT CONVERT(VARCHAR(12),GETDATE(), 114) -- 07:27:11:203
Roll Your Own Date
To roll your own date format, use the datename function. This is also the only way to get the full month name.

SELECT DATENAME(MONTH, GETDATE()) -- June
SELECT DATENAME(DAY,GETDATE()) -- 29
SELECT DATENAME(YEAR, GETDATE()) -- 2009

-- Concatente values
-- June.29.2009
SELECT DATENAME(MONTH, GETDATE()) + '.' + DATENAME(DAY,GETDATE()) + '.' + DATENAME(YEAR, GETDATE())
Here are the rest of the possible datepart intervals:

Date Part Name Interval Values
Year year, yyyy, yy
Quarter quarter, q, qq
Month month, mm, mm
Day of the year dayofyear, dy, y
Day day, dd,. D
Weekday weekday, dw
Week week, wk, ww
Hour hour, hh
Minute minute, mi, n
Second second, ss, s

http://sqlserverplanet.com/tsql/cast-date

Thursday, August 16, 2012

Select เฉพาะวันที่ใน SQL Server

SELECT DATEADD(D, 0, DATEDIFF(D, 0, GETDATE()))

I approved his method though, I finally suggested my method using function CONVERT.
SELECT CONVERT(VARCHAR(10),GETDATE(),111)

http://blog.sqlauthority.com/2007/06/10/sql-server-retrieve-select-only-date-part-from-datetime-best-practice/

Thursday, July 9, 2009

SQL Command for dispaly table on database

SQL Command สำหรับแสดงชื่อตารางทั้งหมดใน Database

EXEC sp_tables


ถ้าจะให้แสดงเฉพาะ Table ให้ใช้ Parameter @table_type
EXEC sp_tables @table_type = "'TABLE'"


เรียกใช้ Paremeter ตามลำดับ
EXEC sp_tables Customers, dbo, Northwind, "'TABLE'"

ผลลัพธ์


หรือใช้ Command นี้
SELECT name
FROM sys.tables

ผลลัพธ์



สามารถใช้ Command นี้แสดง Column ของ Table ที่ต้องการได้
ตัวอย่างแสดง Column ของ Table Customers ของ Database Northwind
SELECT name
FROM sys.syscolumns
WHERE (id = OBJECT_ID('Customers'))

ผลลัพธ์

Wednesday, July 8, 2009

How to use Excel with SQL Server linked servers and distributed queries

การทำ Link Server ไปยัง Excel

More Information http://support.microsoft.com/kb/306397/

Use SQL OPENROWSET OPENDATASOURCE Query Excel

เราสามารถใช้คำสั่ง OPENROWSET OPENDATASOURCE สำหรับ Query ไฟล์ Excel ได้ตามตัวอย่างข้างล่างนี้

ก่อนอื่นถ้ายังไม่เปิดการใช้งาน OPENROWSET OPENDATASOURCE ใน SQL Server 2005 ให้เปิดการใช้งานก่อน ดูวิธีได้ตาม Link นี้
http://usedotnet.blogspot.com/2009/07/sql-server-blocked-access-to-statement.html

ตัวอย่างเป็นการ Query จากไฟล์ C:\Customers.xls ที่ Sheet ชื่อ Customers

SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Data Source=C:\Customers.xls;Extended Properties=Excel 8.0')...[Customers$]

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Customers.xls', [Customers$])

SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=C:\Customers.xls', 'SELECT * FROM [Customers$]')

SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\Customers.xls',
'SELECT * FROM [Customers$]')

More Information: http://support.microsoft.com/kb/321686

SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource'

ถ้าเกิดปัญหา run query openrowset หรือ opendatasource ไม่ได้เกิด error message ดังนี้

Msg 15281, Level 16, State 1, Line 1
SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online.

ให้ทำดังนี้







หลังจากนั้นลอง run query openrowset อีกครั้ง

Thursday, June 25, 2009

Using sql to padding a string with leading zeros (0)

วิธีการเพิ่ม 0 เข้าไปหน้าตัวเลขโดยใช้ SQL Stored Procedure

DECLARE @number INT
DECLARE @size_of_fixed_string TINYINT
DECLARE @string VARCHAR(10)

SET @number = 40 --ตัวเลขที่จะ add 0
SET @size_of_fixed_string = 10 --จำนวนหลักที่ต้องการ

PRINT REPLICATE( '0', @size_of_fixed_string )

SET @string = LEFT( REPLICATE( '0', @size_of_fixed_string ),
@size_of_fixed_string - LEN( @number ) ) + CAST( @number AS VARCHAR(10) )

PRINT @string

ผลลัพธ์คือ
0000000000
0000000040

หรือ

SELECT LEFT(REPLICATE('0',4),4-len(1)) + CAST(1 AS VARCHAR(10))
SELECT LEFT(REPLICATE('0',4),4-len(20)) + CAST(20+1 AS VARCHAR(10))

บรรทัดแรกตัวเลขคือ 1 จะใช้จำนวนหลัก 4 หลัก
บรรทัดที่สองตัวเลขคือ 20 + 1 จะใช้ 4 หลักเหมือนกัน ผลลัพธ์คือ
0001
0021

Thanks for http://bytes.com/groups/ms-sql/495625-how-can-i-conserve-initial-zero-when-convert-numeric-string-using-str
http://sqlblogcasts.com/blogs/tonyrogerson/archive/2006/05/29/765.aspx

Monday, September 29, 2008

Run SQL Server 2000 DTS by Stored Procedure

1. “Windows” + “R” พิมพ์ dtsrunui ในช่อง Open แล้วกด OK



2. จะมีหน้าจอตามรูปด้านล่าง ใส่ ip server ในช่อง Server แล้วก็ใส่ Username และ Password ของ Server นั้น หลังจากนั้นกดปุ่ม ... หลังช่อง Package name จะมี list ของ DTS ใน Server นั้นมาให้เราเลือก เลือก DTS ที่ต้องการ แล้วกด OK



3. จากรูปในขั้นตอนที่แล้ว กดปุ่ม Advanced... จะได้หน้าจอตามรูปด้านล่าง กดปุ่ม Generate... จะมี command ขึ้นมาในช่องด้านหน้า ถ้าต้องการ Encrypt command เพื่อไม่ให้เห็น username และ password ให้ติ๊กถูกที่ Encrypt the command แล้วกด Generate อีกรอบ จะได้ command ที่ encrypt ไว้



4. หลังจากนั้นเอา command ที่ได้ มารันเหมือน SQL ปกติตาม code ด้านล่างนี้

EXEC master..xp_cmdshell {'command_string'}

http://msdn.microsoft.com/en-us/library/aa260689(SQL.80).aspx

Thursday, August 21, 2008

MD5 on SQL Server

MD5 Hash SQL Server Extended Stored Procedure

http://www.codeproject.com/KB/database/xp_md5.aspx

SQL Server ROUND FLOOR CEILING function

SELECT ROUND(100.1145,2)
SELECT ROUND(100.1145,3)
GO

SELECT ROUND(123.45,-3), ROUND(123.45,-2), ROUND(123.45,-1), ROUND(123.45,0), ROUND(123.45,1), ROUND(123.45,2)
GO

SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45), FLOOR($-123.45), FLOOR(123.9)
GO

SELECT CEILING(123.45), CEILING(-123.45), CEILING($123.45), CEILING($-123.45), CEILING(123.1)
GO

DECLARE @m MONEY
SET @m = 120.155 --SELECT @m = 120.155
SELECT @m
SELECT CONVERT(VARCHAR,@m)
GO

Monday, August 11, 2008

SQL Server Linked Server

Query from link server

for default instance name
SELECT * FROM [LinkServerName].DatabaseName.dbo.TableName

SELECT * FROM OPENQUERY([LinkServerName], 'SELECT * FROM TableName')

for other instance name
SELECT * FROM [LinkServerName\InstanceName].DatabaseName.dbo.TableName

SELECT * FROM OPENQUERY([LinkServerName\InstanceName], 'SELECT * FROM TableName')

other method
SELECT * FROM LinkServerName..UserName.TableName

Tuesday, August 5, 2008

How to insert values into an identity column in SQL Server

USE Northwind
GO

IF OBJECT_ID('IdentityTable') IS NOT NULL
DROP TABLE IdentityTable
GO

CREATE TABLE IdentityTable (
TheIdentity INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
TheValue NVARCHAR(20) NOT NULL )
GO

INSERT IdentityTable(TheIdentity, TheValue)
VALUES (1, 'First Row')
GO

Server: Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'IdentityTable' when IDENTITY_INSERT is set to OFF.

SET IDENTITY_INSERT IdentityTable ON

INSERT IdentityTable(TheIdentity, TheValue)
VALUES (3, 'First Row')

SET IDENTITY_INSERT IdentityTable OFF

SET IDENTITY_INSERT IdentityTable ON

INSERT IdentityTable(TheIdentity, TheValue)
VALUES (10, 'Row Ten')

SET IDENTITY_INSERT IdentityTable OFF

INSERT IdentityTable(TheValue)
VALUES ('Should be 11')

SELECT * FROM IdentityTable
GO

Result
---------------------
1 First Row
10 Row Ten
11 Should be 11

Show row number in SQL Server and Oracle

SQL Server:
USE Northwind
SELECT ROW_NUMBER() OVER (ORDER BY EmployeeID DESC) AS RowID, *
FROM EMPLOYEES ORDER BY FirstName

Show row number in SQL Server 2000, 2005
http://support.microsoft.com/kb/186133


Oracle:
SELECT rownum, column_name FROM user_tables

Show row number in Oracle
http://blog.lishman.com/2008/03/rownum.html

Friday, June 20, 2008

Single quote in sql

USE Northwind

SELECT CHAR(39)+ CompanyName FROM Customers

SELECT a='Thailand''s', b='Thailand'+'''s'

Thursday, June 19, 2008

How to use variable as column Name

USE Northwind

DECLARE @SqlQuery VARCHAR(1000)
DECLARE @ColumnName VARCHAR(100)
DECLARE @TableName VARCHAR(100)

SET @ColumnName = N'Address'
SET @TableName = N'Customers'
SET @SqlQuery = N'SELECT '+ @ColumnName+ ' FROM ' + @TableName

EXEC (@SqlQuery)

Friday, June 6, 2008

Error 7405: Heterogeneous queries (SQL Server 2000)

ก่อนคำสั่ง Create Procedure ให้ใส่

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO

http://support.microsoft.com/kb/296769

Monday, May 26, 2008

Change temporary datetime regional to SQL Server

If my database set to COLLATE Thai_CI_AS. Then, I select datetime format 106, result below

SELECT CONVERT(VARCHAR,GETDATE(),106)
Result: 26 พ.ค. 2008


If I want to select in english format, I must use command this

SET LANGUAGE us_english
SELECT CONVERT(VARCHAR,GETDATE(),106)
Result: 26 May 2008

SET LANGUAGE us_english
SELECT CONVERT(VARCHAR,GETDATE(),106)

SET LANGUAGE thai
SELECT CONVERT(VARCHAR,GETDATE(),106)


************************************************************

Case Study:
My problem, I created web application with ASP.NET and the application use datetime in format "dd-MMM-yyyy" for example "16-May-2008"(I set CultureInfo to "en-US" in Global.asax shown below).

void Application_BeginRequest(object sender, EventArgs e)
{
// Code that runs on application startup
System.Globalization.CultureInfo vNewCulture = new System.Globalization.CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = vNewCulture;
}

In test environment I connected the application to SQL Server database(in same IIS). The server set regional language to "en-US". When I query data from database, result is nomally.

Then I migrate database to real database server. In the real database server set regional to Thai "th-TH". When the application query data from database server, I founded error.

I fixed this problem by insert "SET LANGUAGE us_english" at the beginning of query data to all query.

************************************************************

http://mark-dot-net.blogspot.com