คลังเก็บหมวดหมู่: Database

MSSQL Split Function

CREATE FUNCTION dbo.Split(@String nvarchar(4000), @Delimiter char(1))

RETURNS @Results TABLE (Items nvarchar(4000))

AS    BEGIN

    DECLARE @INDEX INT

    DECLARE @SLICE nvarchar(4000)

    -- HAVE TO SET TO 1 SO IT DOESNT EQUAL Z

    --     ERO FIRST TIME IN LOOP

    SELECT @INDEX = 1

    WHILE @INDEX !=0

BEGIN

              -- GET THE INDEX OF THE FIRST OCCURENCE OF THE SPLIT CHARACTER

              SELECT @INDEX = CHARINDEX(@Delimiter,@STRING)

              -- NOW PUSH EVERYTHING TO THE LEFT OF IT INTO THE SLICE VARIABLE

              IF @INDEX !=0

                    SELECT @SLICE = LEFT(@STRING,@INDEX - 1)

              ELSE

                    SELECT @SLICE = @STRING

              -- PUT THE ITEM INTO THE RESULTS SET

              INSERT INTO @Results(Items) VALUES(@SLICE)

              -- CHOP THE ITEM REMOVED OFF THE MAIN STRING

              SELECT @STRING = RIGHT(@STRING,LEN(@STRING) - @INDEX)

              -- BREAK OUT IF WE ARE DONE

              IF LEN(@STRING) = 0 BREAK

    END

    RETURN

END

Is there For Loop in MSSQL?

ใน MSSQL มี For Loop หรือเปล่า นี่คือคำถาม จากที่ลอง Search ๆ ดูแล้วปรากฏไม่มีนะครับ แต่สามารถใช้ While แทนได้ดังตัวอย่างคัพ

declare @i int
set @i=0
while (@i<10)
begin
print @i
set @i=@i+1
end

ลองรันกันดูคัพ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

MSSQL Result ??? in Result Set

ในกรณีที่เราเรียกดูข้อมูลจาก MSSQL แล้ว ผลที่ ได้จากการ Run Query ในโปรแกรมที่เขียนด้วย PHP หรือ ASP แล้วแสดงผลกลับมาเป็น ???
จากที่ผมเคยเจอ ผมได้ทำการเปลี่ยน Regional and Language Options แล้วจะทำให้ Return เป็น ภาษาไทยตามความต้องการ

วิธีการเปลี่ยน

ไปที่ Control Panel คลิกที่ Regional and Language Options ดังรูป

set-language-with-mssql-01

อ่านเพิ่มเติม →

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

Hide system tables in SQL Server Enterprise Manager

ซ่อน System Table ใน SQL Server Enterprise Manager
หลายครั้งหลายครา ที่เปิด MS SQL Enterprise Manager หรือ Query Analyzer ขึ้นมาจะมี Table ที่เป็น ของ system อยู่ ซึ่ง จริง ๆ เราแทบไม่ต้องใช้ในการทำงานปกติ วิธี การ ปิดไม่ให้ Table ประเภทนี้แสดงผล สามารถทำได้ดังนี้
อ่านเพิ่มเติม →

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

Mysql Old Password

ปัญหา MySQL Old Password

ปัญหานี้เกิดจาก การที่ MySQL มีการเปลี่ยนแปลงกระบวนการในการเข้ารหัส password ของ user
ผลก็คือ ทำให้ client รุ่นเก่า ไม่สามารถติดต่อ MySQL ได้ ซึ่งกลไกดังกล่าว มีใช้ใน MySQL 4.1 เป็นต้นไป

แต่เราสามารถสั่งให้ MySQL สามารถใช้ OLD_PASSWORD() เพื่อกำหนดให้ MySQL ใช้รูปแบบการจัดเก็บ password แบบเดิมได้ เช่น

CODE

mysql> SET PASSWORD FOR ‘some_user’@’some_host’ = OLD_PASSWORD(‘newpwd’);

หรือการมี user อยู่แล้ว

CODE

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(‘newpwd’)
WHERE Host = ‘some_host’ AND User = ‘some_user’;
mysql> FLUSH PRIVILEGES;

ถ้าคุณมี user อยู่เป็นพัน เปลี่ยนแบบนี้คงไม่ไหวแน่ กรณีนี้ให้สั่ง MySQL ทำงานคู่กับ parameter –old-passwords

CODE

mysqld –old-passwords

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

การใช้ cursor ในการอัพเดตข้อมูล เร็วกว่า การเขียนโปรแกรม?

ฝาก code ไว้ในอ้อมใจ

begin tran g4

DECLARE @EMPLOYEE_CODE varchar(8) ,
@DEPARTMENT_CODE varchar(4) --ประกาศค่าตัวแปลในที่นี้เป็นหมายเลขบัญชี
DECLARE tempEMP CURSOR FOR -- ประกาศชื่อ tempAR เป็น Cursor
SELECt employee_code,department_code FROM tmp_emperror -- query statement ดึงข้อมูล 
OPEN tempEMP
FETCH NEXT FROM tempEMP into @EMPLOYEE_CODE ,@DEPARTMENT_CODE -- นำค่า employee_code และ department_code ใน table มาใส่ใน ตัวแปล @ARD_ACC_NO ของ mssql
WHILE (@@FETCH_STATUS = 0) -- วนลูปคัพ
BEGIN
update table_exp_emp_detail set department_code = @DEPARTMENT_CODE where employee_code = @EMPLOYEE_CODE
FETCH NEXT FROM tempEMP into @EMPLOYEE_CODE ,@DEPARTMENT_CODE -- loop นั่นเอง
END
CLOSE tempEMP
DEALLOCATE tempEMP

rollback tran g4

การหาค่าซ้ำใน Table

หาค่าซ้ำ

SELECT column,COUNT(*) c FROM table
GROUP BY column HAVING COUNT(*) &gt; 1

อันนี้หาหลายฟิลล์

SELECT EMP_CODE,COUNT(*) c FROM department
GROUP BY EMP_CODE ,is_active HAVING COUNT(*) &gt; 1 and is_active = 'Y'
ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

การป้องกันการอัพเดตผิดพลาดใน Query Analysis MSSQL

บางครั้งเราชอบเขียน Code SQL เยอะๆ หลายบรรทัด แล้วค่อย รัน query ที่เลือกไว้ ใน Query Analyser
แต่ในบางครั้ง เราเขียน query ที่มีการอัพเดต query ด้วย ซึ่ง จะมีกระทบอย่างแรงกับ Database ของเรา
วิธีป้องกันความผิดพลาดแบบนั้น ทำได้ง่ายๆ คือ ลบ query ที่ไม่ใช้ใน Query Analyser ทิ้งซะก่อน แต่น้อยคนจะทำ ผมจึงนำเสนอวิธีใหม่ โดยใช้ Transaction เข้ามาช่วย
โดยการ เขียน

begin tran t3

--query ต่างๆ

rollback tran t3

ซึ่งถ้าเราพลาดกด f5 โดยยังไม่ได้ เลือก query ทุกอย่างจะไม่กระทำ โอ้จอรจ์ เหมาะกะคนอย่างผมจิงๆ

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย

Microsof SQL Insert from Table อื่น | mssql insert from

ในกรณีที่อยู่ใน Table เดียวกัน ต้องการ Duplicate เช่น อาจจะเป็นการ Copy Group เป็นต้น

INSERT INTO table1 (f1, f2) SELECT f1, f2 FROM table1 where f1 = '?' 

กรณีเป็น Table อื่น

INSERT INTO table1 (f1, f2) SELECT f3, f4 FROM table2 where f1 = '?' 

อันนี้ประมาณว่า Field ต้อง Datatype เดียวกันนะครับ

รายละเอียดการ Insert From จากเว็บ www.sqlteam.com

คำค้นที่น่าจะเกี่ยวข้อง
sql insert from select
mssql insert from another table

ข้อความนี้ถูกเขียนใน Database และติดป้ายกำกับ บน โดย