Thứ Sáu, 26 tháng 2, 2016

char and varchar (Transact-SQL)

https://msdn.microsoft.com/en-us/library/ms176089.aspx

Note:

char là kiểu fixed length nên nếu dùng không đúng trong 1 số trường hợp sẽ gây ra code chạy không như mong đợi.

Ví dụ khai báo biến kiểu char(20) sau đó gắn giá trị 10 ký tự thì 10 ký tự còn lại sẽ là khoảng trắng.

Thứ Hai, 22 tháng 2, 2016

Đoạn code Format Number ( ngắt theo ngàn, triệu ... ) bằng Javascript

Viết lại từ phiên bản C# và xử lý thêm trường hợp số âm
http://www.hanhtranglaptrinh.com/2011/12/oan-code-format-number-ngat-theo-ngan.html


var insertAt = function (originalStr, index, string) {
     return originalStr.substr(0, index) + string + originalStr.substr(index);
}
var formatNumber = function (number) {
    var rs;
    var part = number.replace("-", "").split('.');
    var len = part[0].length;
    var i = parseInt(len / 3);
    if (i > 0) {
        var pos = len % 3;
        if (pos > 0) {
            part[0] = insertAt(part[0],pos, ",");
            pos += 4;
        }
        else {
            pos = 3;
        }

        for (var k = 1; k < i; k++) {
            part[0] = insertAt(part[0],pos, ",");
            pos += 4;
        }

    }
    if (number.indexOf(".") >= 0) {
        rs = part[0] + "." + part[1];
    }
    else
        rs = part[0];

    if (number.indexOf("-") == 0)
        rs = "-" + rs;

    return rs;
}

Thứ Năm, 14 tháng 1, 2016

Drop and Re-Create All Foreign Key Constraints in SQL Server

Reference: https://www.mssqltips.com/sqlservertip/3347/drop-and-recreate-all-foreign-key-constraints-in-sql-server/

CREATE TABLE #x -- feel free to use a permanent table
(
  drop_script NVARCHAR(MAX),
  create_script NVARCHAR(MAX)
);
  
DECLARE @drop   NVARCHAR(MAX) = N'',
        @create NVARCHAR(MAX) = N'';

-- drop is easy, just build a simple concatenated list from sys.foreign_keys:
SELECT @drop += N'
ALTER TABLE ' + QUOTENAME(cs.name) + '.' + QUOTENAME(ct.name) 
    + ' DROP CONSTRAINT ' + QUOTENAME(fk.name) + ';'
FROM sys.foreign_keys AS fk
INNER JOIN sys.tables AS ct
  ON fk.parent_object_id = ct.[object_id]
INNER JOIN sys.schemas AS cs 
  ON ct.[schema_id] = cs.[schema_id];

INSERT #x(drop_script) SELECT @drop;

-- create is a little more complex. We need to generate the list of 
-- columns on both sides of the constraint, even though in most cases
-- there is only one column.
SELECT @create += N'
ALTER TABLE ' 
   + QUOTENAME(cs.name) + '.' + QUOTENAME(ct.name) 
   + ' ADD CONSTRAINT ' + QUOTENAME(fk.name) 
   + ' FOREIGN KEY (' + STUFF((SELECT ',' + QUOTENAME(c.name)
   -- get all the columns in the constraint table
    FROM sys.columns AS c 
    INNER JOIN sys.foreign_key_columns AS fkc 
    ON fkc.parent_column_id = c.column_id
    AND fkc.parent_object_id = c.[object_id]
    WHERE fkc.constraint_object_id = fk.[object_id]
    ORDER BY fkc.constraint_column_id 
    FOR XML PATH(N''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'')
  + ') REFERENCES ' + QUOTENAME(rs.name) + '.' + QUOTENAME(rt.name)
  + '(' + STUFF((SELECT ',' + QUOTENAME(c.name)
   -- get all the referenced columns
    FROM sys.columns AS c 
    INNER JOIN sys.foreign_key_columns AS fkc 
    ON fkc.referenced_column_id = c.column_id
    AND fkc.referenced_object_id = c.[object_id]
    WHERE fkc.constraint_object_id = fk.[object_id]
    ORDER BY fkc.constraint_column_id 
    FOR XML PATH(N''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 1, N'') + ');'
FROM sys.foreign_keys AS fk
INNER JOIN sys.tables AS rt -- referenced table
  ON fk.referenced_object_id = rt.[object_id]
INNER JOIN sys.schemas AS rs 
  ON rt.[schema_id] = rs.[schema_id]
INNER JOIN sys.tables AS ct -- constraint table
  ON fk.parent_object_id = ct.[object_id]
INNER JOIN sys.schemas AS cs 
  ON ct.[schema_id] = cs.[schema_id]
WHERE rt.is_ms_shipped = 0 AND ct.is_ms_shipped = 0;

UPDATE #x SET create_script = @create;

PRINT @drop;
PRINT @create;

/*
EXEC sp_executesql @drop
-- clear out data etc. here
EXEC sp_executesql @create;
*/