SQL Server

Setup Timestamp to Table in SQL Server

ปกติแล้วเกือบทุก table จะต้องการใช้ Timestamp ส่วนมากจะ insert ใส่กันไปเองด้วย coding หรือ stored procedure แต่ก็มีวิธีที่ทำให้เราไม่ต้องเข้าไปยุ่งกับมันเลย เพราะยังไงเวลาที่ต้องการ stamp ก็คือเวลาปัจจุบันอยู่แล้ว

1. เริ่มแรกให้เราสร้าง field ที่เป็นประเภท datetime

2. เซ็ต Column Properties ให้ Default Value เป็น getdate() เพื่อเป็นการ auto timestamp

3. ให้ลอง insert ข้อมูลโดยไม่ใส่ create_date ก็จะพบว่าผลลัพธ์ถูกใส่ timestamp มาให้แล้วโดยอัตโนมัติ

หวังว่าข้อมูลนี้คงมีประโยชน์ไม่มากก็น้อยนะครับ

Case Sensitive SQL Query with SQL Server

ปกติแล้ว sql server ถ้าเรา select อะไรก็ตามแล้ว where name = ‘oue’ ผลลัพธ์ที่ได้มาก็จะมีทั้ง oue, Oue, oUe, ouE เพราะว่า default เป็น non Case Sensitive แต่ถ้าผมต้องการให้ query เฉพาะ ‘oue’ ล่ะจะทำอย่างไร ก็ทำตาม code ด้านล่างเลยครับ

1
2
3
select *
from user
where nickname COLLATE Latin1_General_CS_AS = 'oue'

แค่นี้เอง สั้นๆง่ายๆ ครับ

ROW_NUMBER() in sql server 2005

ปกติเวลาที่เราต้องการ select ของโดยกำหนดไว้ว่าต้องไม่เกิน 10 row นะ ก็จะใช้

1
select top 10 * from table1

แต่ถ้าบอกว่า ต้องการ select ของโดยกำหนดว่า เอา row ที่ 10 – 20 เริ่มจะสงสัยละว่าทำอย่างไร เพราะ sql server กำหนดได้แค่ว่าไม่ให้เกินกี่ตัว แต่โชคดีที่ sql server 2005 มี ROW_NUMBER() ให้ใช้ (เพิ่งมีใน 2005) วิธีใช้ก็ตามนี้เลยครับ

1
2
3
4
select ROW_NUMBER() OVER(order by ViewId asc) as ROW_NUMBER
, ViewId
, TopicShow
from mView

sql ด้านบนนี้จะได้เลขของ row มา ทำให้เราสามารถทำ sub query เพื่อเลือกเฉพาะ row ที่เราต้องการได้

1
2
3
4
5
6
7
8
select *
from (
select ROW_NUMBER() OVER(order by ViewId asc) as ROW_NUMBER
, ViewId
, TopicShow
from mView ) as news
where ROW_NUMBER > 10
and ROW_NUMBER <= 20

เพิ่มเติมอีกเล็กน้อย เพื่อทำให้ query รวดเร็วยิ่งขึ้น จาก sql ข้างบนจะเห็นว่า sub query จะ select ของทุกอย่างใน table ก่อน แล้วค่อยให้ query ด้านนอก filter อีกครั้ง ซึ่งเปลือง process พอสมควร จึงแก้ไขด้วยการใส่ top 20 ลงไปใน sub query เพื่อลด process กันหน่อย

1
2
3
4
5
6
7
8
select *
from (
select top 20 ROW_NUMBER() OVER(order by ViewId asc) as ROW_NUMBER
, ViewId
, TopicShow
from mView ) as news
where ROW_NUMBER > 10
and ROW_NUMBER <= 20

ใครเข้ามาอ่านแล้วเห็นว่ามีประโยชน์ก็ comment หน่อยนะคับ (หาเสียงกันสุดๆ ^ ^)
ไว้พบกันใหม่กับ post ต่อไป
ถ้าไม่พบปัญหา คงไม่ได้มาเขียนบทความให้อ่านแน่ๆเลย >.<

Change Owner Name for SQL Server (Table, Stored Procedures)

Use this command below to change the owner name of table or stored procedures in SQL Server

1
2
exec sp_changeobjectowner 'TABLE_NAME', 'dbo'
exec sp_changeobjectowner 'STORED_PROCEDURES_NAME', 'dbo'

Alter table statement in sql server

If you want to add some column in a table. You might use the sql server management tool or other tools to manage this with their’s easy UI. But if you are in some situation that haven’t the management tools to manage the table. You might use the sql script to do that. It’s call Alter Table.

Actually I found a problem with web sql management tools (with parallels Plesk panel) because when I change a column in table then the owner of table will change and the application in this server cann’t connected with this table. This’s my serious problem. -*-

Hope you enjoin to use this solution.

To add a column in table :
ALTER TABLE table_name
ADD column_name datatype

To drop a column in table :
ALTER TABLE table_name
DROP COLUMN column_name

To change a datatype of column in table :
ALTER TABLE table_name
ALTER COLUMN column_name datatype

Cross server query (Sql Server)

When using sql server query crossing 2 or more server in the same query.
try this

select * from OPENDATASOURCE(
‘SQLOLEDB’,
‘Data Source=111.111.111.11;User ID=uid;Password=pass’
).DBName.dbo.TableName

But if you query crossing 2 or more database form 1 server.
try this

select * from DBName.dbo.TableName

Select table name from Sql Server

try this :

select * from sysobjects where xtype = ‘U’

you will get all table name in database that you focus

and try

select * from sysobjects where xtype = ‘U’ order by uid asc, name asc

you will get the name list like the left tab of sql server

Single quote problem in SQL Server

It is a query string problem when you are coding like this

string sqlstr = “insert into UserMember (Id, Name) values(1, ” + txtName.Text + “)”

if the txtName.Text has the value like this
1. testname’
2. ‘testname
3. testn’ame
etc.

the error message will be found
– Unclosed quotation mark before the character string ‘)
– Incorrect syntax near ‘testname’ More