Các tính năng ẩn của SQL Server


215

Một số tính năng ẩn của SQL Server là gì?

Ví dụ, hệ thống không có giấy tờ lưu trữ thủ tục, thủ thuật để làm những việc rất hữu ích nhưng không đủ tài liệu?


Đáp án

Cảm ơn tất cả mọi người cho tất cả các câu trả lời tuyệt vời!

Thủ tục lưu trữ

  • sp_msforeachtable: Chạy một lệnh với '?' thay thế bằng mỗi tên bảng (v6.5 trở lên)
  • sp_msforeachdb: Chạy một lệnh với '?' thay thế bằng mỗi tên cơ sở dữ liệu (v7 trở lên)
  • sp_who2: giống như sp_who, nhưng có nhiều thông tin hơn cho các khối xử lý sự cố (v7 trở lên)
  • sp_helptext: Nếu bạn muốn mã của một thủ tục được lưu trữ, hãy xem & UDF
  • sp_tables: trả về một danh sách tất cả các bảng và khung nhìn của cơ sở dữ liệu trong phạm vi.
  • sp_stored_procedures: trả về danh sách tất cả các thủ tục được lưu trữ
  • xp_sscanf: Đọc dữ liệu từ chuỗi vào các vị trí đối số được chỉ định bởi mỗi đối số định dạng.
  • xp_fixeddrive :: Tìm ổ đĩa cố định có dung lượng trống lớn nhất
  • sp_help: Nếu bạn muốn biết cấu trúc bảng, chỉ mục và các ràng buộc của bảng. Cũng xem và UDF. Phím tắt là Alt + F1

Đoạn trích

  • Trả về các hàng theo thứ tự ngẫu nhiên
  • Tất cả các đối tượng người dùng cơ sở dữ liệu trước ngày sửa đổi cuối cùng
  • Ngày trở lại chỉ
  • Tìm hồ sơ ngày rơi vào đâu đó trong tuần hiện tại.
  • Tìm hồ sơ ngày xảy ra tuần trước.
  • Trả về ngày bắt đầu của tuần hiện tại.
  • Trả về ngày đầu tuần trước.
  • Xem văn bản của một thủ tục đã được triển khai đến một máy chủ
  • Thả tất cả các kết nối đến cơ sở dữ liệu
  • Bảng tổng kiểm tra
  • Kiểm tra hàng
  • Bỏ tất cả các thủ tục trong cơ sở dữ liệu
  • Ánh xạ lại Id đăng nhập chính xác sau khi khôi phục
  • Gọi Thủ tục lưu trữ từ một câu lệnh INSERT
  • Tìm thủ tục theo từ khóa
  • Bỏ tất cả các thủ tục trong cơ sở dữ liệu
  • Truy vấn nhật ký giao dịch cho một cơ sở dữ liệu theo chương trình.

Chức năng

  • HashBytes ()
  • Mã hóa
  • Lệnh PIVOT

Linh tinh

  • Bổ sung chuỗi kết nối
  • TableDiff.exe
  • Kích hoạt cho sự kiện đăng nhập (Mới trong Gói dịch vụ 2)
  • Tăng hiệu suất với các cột được tính toán bền vững (pcc).
  • Cài đặt DEFAULT_SCHema trong sys.database_principles
  • Tham số cưỡng bức
  • Định dạng lưu trữ Vardecimal
  • Tìm ra các truy vấn phổ biến nhất trong vài giây
  • Cơ sở dữ liệu chia sẻ có thể mở rộng
  • Tính năng Bộ lọc Thủ tục Bảng / Lưu trữ trong SQL Management Studio
  • Cờ dấu vết
  • Số sau một đợt GOlặp lại
  • Bảo mật sử dụng lược đồ
  • Mã hóa bằng cách sử dụng các chức năng mã hóa, khung nhìn và bảng cơ sở được kích hoạt

4
Nếu được biết, sẽ rất tốt nếu bao gồm các phiên bản áp dụng với mỗi câu trả lời. (2000 trở lên, chỉ 2005, 2000, v.v.)
bw

Có rất nhiều điều tốt đẹp trong câu hỏi này. Xin đừng xóa nó! :-)
Sklivvz

Câu trả lời:


91

Trong Studio quản lý, bạn có thể đặt một số sau điểm đánh dấu cuối đợt GO để khiến lô đó được lặp lại số lần đó:

PRINT 'X'
GO 10

Sẽ in 'X' 10 lần. Điều này có thể cứu bạn khỏi việc sao chép / dán tẻ nhạt khi làm những việc lặp đi lặp lại.


70

Rất nhiều nhà phát triển SQL Server dường như vẫn chưa biết về mệnh đề OUTPUT (SQL Server 2005 trở lên) trên câu lệnh DELETE, INSERT và UPDATE.

Có thể cực kỳ hữu ích để biết những hàng nào đã được XÁC NHẬN, UPDATEd hoặc DELETEd và mệnh đề OUTPUT cho phép thực hiện việc này rất dễ dàng - nó cho phép truy cập vào các bảng "ảo" được gọi inserteddeleted(như trong trình kích hoạt):

DELETE FROM (table)
OUTPUT deleted.ID, deleted.Description
WHERE (condition)

Nếu bạn đang chèn các giá trị vào một bảng có trường khóa chính INT IDENTITY, với mệnh đề OUTPUT, bạn có thể lấy ID mới được chèn ngay lập tức:

INSERT INTO MyTable(Field1, Field2)
OUTPUT inserted.ID
VALUES (Value1, Value2)

Và nếu bạn đang cập nhật, sẽ rất hữu ích khi biết điều gì đã thay đổi - trong trường hợp này, insertedđại diện cho các giá trị mới (sau CẬP NHẬT), trong khi deletedđề cập đến các giá trị cũ trước CẬP NHẬT:

UPDATE (table)
SET field1 = value1, field2 = value2
OUTPUT inserted.ID, deleted.field1, inserted.field1
WHERE (condition)

Nếu nhiều thông tin sẽ được trả về, đầu ra của OUTPUT cũng có thể được chuyển hướng đến một bảng tạm thời hoặc một biến bảng ( OUTPUT INTO @myInfoTable).

Vô cùng hữu ích - và rất ít được biết đến!

Marc


52

sp_msforeachtable: Chạy một lệnh với '?' thay thế bằng mỗi tên bảng. ví dụ

exec sp_msforeachtable "dbcc dbreindex('?')"

Bạn có thể phát hành tối đa 3 lệnh cho mỗi bảng

exec sp_msforeachtable
    @Command1 = 'print ''reindexing table ?''',
    @Command2 = 'dbcc dbreindex(''?'')',
    @Command3 = 'select count (*) [?] from ?'

Cũng thế, sp_MSforeachdb


2
Bạn có thể lấy tên của bảng trong truy vấn bằng cách sử dụng các dấu ngoặc đơn xung quanh dấu hỏi. sp_msforeachtable "chọn tính (*), '?' như tabenm từ đâu? "
Jody

51

Bổ sung chuỗi kết nối:

NhiềuActiveResultSets = true;

Điều này làm cho ADO.Net 2.0 trở lên đọc nhiều kết quả, chỉ chuyển tiếp, chỉ đọc trên một kết nối cơ sở dữ liệu, có thể cải thiện hiệu suất nếu bạn đọc nhiều. Bạn có thể bật nó ngay cả khi bạn đang thực hiện kết hợp các loại truy vấn.

Tên ứng dụng = MyProgramName

Bây giờ khi bạn muốn xem danh sách các kết nối hoạt động bằng cách truy vấn bảng sys Processes, tên chương trình của bạn sẽ xuất hiện trong cột program_name thay vì ".Net SqlClient Data Carrier"


7
Tôi đặt tên ứng dụng là một yêu cầu tại công ty của tôi. Mỗi ứng dụng mới phải có một tên duy nhất. Làm cho việc theo dõi ứng dụng nào bị khóa / phá vỡ thứ gì đó dễ dàng hơn nhiều.
Neil N

2
Tên ứng dụng cũng có sẵn như là một bộ lọc trong hồ sơ. Nó giúp ích rất nhiều nếu bạn chỉ muốn xem các truy vấn của mình chứ không phải các truy vấn của đồng nghiệp.
Mathias F

33

TableDiff.exe

  • Công cụ Bảng khác biệt cho phép bạn khám phá và đối chiếu sự khác biệt giữa bảng nguồn và bảng đích hoặc dạng xem. Tablediff Utility có thể báo cáo sự khác biệt về lược đồ và dữ liệu. Tính năng phổ biến nhất của tablediff là thực tế là nó có thể tạo ra một tập lệnh mà bạn có thể chạy trên đích sẽ điều hòa sự khác biệt giữa các bảng.

Liên kết


31

Một kỹ thuật TSQL ít được biết đến để trả về các hàng theo thứ tự ngẫu nhiên:

-- Return rows in a random order
SELECT 
    SomeColumn 
FROM 
    SomeTable
ORDER BY 
    CHECKSUM(NEWID())

6
Tuyệt vời cho tập kết quả nhỏ. Tôi sẽ không sử dụng nó trên một bàn có hơn 10000 hàng trừ khi bạn có thời gian rảnh rỗi
John Sheehan

Tôi đã sử dụng nó trên các bảng lớn hơn thế nhiều và nó không quá chậm.
Mitch Wheat

Mục đích của KIỂM TRA () là gì? Bạn có thể đặt hàng chỉ bằng NEWID ().
Jonas Lincoln

6
Tôi thậm chí đã nhìn thấy kết quả tốt trên hàng 100.000.000 (100 triệu), với CHECKSUM (). Ngoài ra, tôi cũng phải hỏi, tại sao không chỉ ĐẶT HÀNG B NEWNG NEWID?
Troy DeMonbreun

5
@GateKiller: Tôi đã quay lại bản chỉnh sửa của mình, vì Checksum () không phải là một lỗi; nó làm giảm kích thước của cột sắp xếp.
Mitch Wheat

30

Trong Management Studio, bạn có thể nhanh chóng nhận được danh sách các cột được phân tách bằng dấu phẩy cho một bảng bằng cách:

  1. Trong Object Explorer, mở rộng các nút trong một bảng đã cho (vì vậy bạn sẽ thấy các thư mục cho Cột, Khóa, Ràng buộc, Kích hoạt, v.v.)
  2. Chỉ vào thư mục Cột và kéo vào truy vấn.

Điều này rất hữu ích khi bạn không muốn sử dụng định dạng khủng được trả về bằng cách nhấp chuột phải vào bảng và chọn Bảng Script là ..., sau đó Chèn vào ... Thủ thuật này hoạt động với các thư mục khác mà nó sẽ cung cấp cho bạn một danh sách các tên được phân cách bằng dấu phẩy có trong thư mục.


23

Xây dựng hàng

Bạn có thể chèn nhiều hàng dữ liệu với một câu lệnh chèn.

INSERT INTO Colors (id, Color)
VALUES (1, 'Red'),
       (2, 'Blue'),
       (3, 'Green'),
       (4, 'Yellow')

Tôi đã bỏ phiếu này, nhưng sau đó đã thử nó trong MSSQL 2005, và nó không hoạt động. Chỉ có năm 2008?
richardtallent

11
Vâng, đó là một tính năng mới của năm 2008
Rob Boek

2
Đây là một tính năng mà tôi đã bỏ lỡ khi tôi chuyển từ DB2 sang SQL Server. Trong DB2, đã có một sự cải thiện đáng kể về tốc độ khi sử dụng điều này thay vì các câu lệnh chèn riêng lẻ
Nathan Koop

22

Nếu bạn muốn biết cấu trúc bảng, chỉ mục và các ràng buộc:

sp_help 'TableName'

Kết hợp mẹo này với phím tắt của nó! Đầu tiên, đánh dấu một tablename và sau đó nhấn ALT + F1
Michael J Swart


20

Tìm ra các truy vấn phổ biến nhất

  • Với sys.dm_exec_query_stats, bạn có thể tìm ra nhiều kết hợp phân tích truy vấn bằng một truy vấn duy nhất.

Liên kết với dấu phẩy

select * from sys.dm_exec_query_stats 
order by execution_count desc

17

7
Tôi thấy Jesus trong kết quả truy vấn của tôi!
P Daddy

6
Pfff ... Điều gì làm lãng phí thời gian của anh ta gây rối với tab kết quả không gian. Đợi đã ... Bạn biết đấy, tôi nghĩ rằng bài đăng đó trông quen thuộc, bây giờ tôi nhớ tại sao.
Michael J Swart

16

NGOẠI TRỪ và TƯƠNG TÁC

Thay vì viết các phép nối và truy vấn phức tạp, hai từ khóa này là một cách viết nhanh thanh lịch và dễ đọc hơn để thể hiện ý định truy vấn của bạn khi so sánh hai kết quả truy vấn. Mới kể từ SQL Server 2005, chúng bổ sung mạnh mẽ cho UNION đã tồn tại trong ngôn ngữ TSQL trong nhiều năm.

Các khái niệm EXCEPT, INTERSECT và UNION là cơ bản trong lý thuyết tập hợp làm cơ sở và nền tảng của mô hình hóa quan hệ được sử dụng bởi tất cả các RDBMS hiện đại. Bây giờ, kết quả loại sơ đồ Venn có thể được tạo trực quan hơn và khá dễ dàng bằng TSQL.


16

Tôi biết nó không hoàn toàn bị ẩn, nhưng không có quá nhiều người biết về lệnh PIVOT . Tôi đã có thể thay đổi một thủ tục được lưu trữ sử dụng con trỏ và mất 2 phút để chạy vào đoạn mã 6 giây nhanh chóng, bằng 1/10 số dòng!


16

hữu ích khi khôi phục cơ sở dữ liệu cho mục đích thử nghiệm hoặc bất cứ điều gì. Ánh xạ lại chính xác ID đăng nhập:

EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'

Tôi đã có công cụ này không hoạt động trước đây và tôi phải thay đổi quyền sở hữu đối tượng thành người dùng tạm thời, bỏ người dùng ban đầu, đặt lại bản gốc và gán lại quyền sở hữu. Ừ ...
StingyJack

15

Thả tất cả các kết nối vào cơ sở dữ liệu:

Use Master
Go

Declare @dbname sysname

Set @dbname = 'name of database you want to drop connections from'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End

Có một tham số cơ sở dữ liệu hoặc một tham số cơ sở dữ liệu nào làm điều này cho tôi không? Tôi nhận thấy rằng nếu bạn cố gắng 'xóa cơ sở dữ liệu' thông qua ui, sẽ có một hộp kiểm cho 'đóng các kết nối hiện có' ngụ ý rằng đó là một tham số boolean.
DevinB

1
Trên thực tế, tôi chỉ tìm thấy một giải pháp hai dòng. ALTER DATABASE [@ database_name @] SET READ_ONLY VỚI ROLLBACK NGAY --this ngắt kết nối tất cả người dùng ALTER DATABASE [@ database_name @] SET READ_WRITE VỚI ROLLBACK NGAY DROP DATABASE [@ database_name @]
DevinB

1
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATEcũng sẽ ngăn chặn mọi kết nối mới xảy ra.
ErikE

15

Bảng tổng kiểm tra

Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK)

Kiểm tra hàng

Select CheckSum_Agg(Binary_CheckSum(*)) From Table With (NOLOCK) Where Column = Value

2
Những thứ này cho phép bạn tạo một tổng kiểm tra cho tất cả dữ liệu trong bảng. Đây là một cách đơn giản và nhanh chóng để kiểm tra xem hai hàng hoặc hai bảng có giống nhau không.
GateKiller

15

Tôi không chắc đây có phải là một tính năng ẩn hay không, nhưng tôi đã vấp phải điều này và đã thấy nó hữu ích trong nhiều lần. Bạn có thể đồng bộ một tập hợp một trường trong một câu lệnh chọn duy nhất, thay vì sử dụng một con trỏ và lặp qua câu lệnh select.

Thí dụ:

DECLARE @nvcConcatonated nvarchar(max)
SET @nvcConcatonated = ''

SELECT @nvcConcatonated = @nvcConcatonated + C.CompanyName + ', '
FROM tblCompany C
WHERE C.CompanyID IN (1,2,3)

SELECT @nvcConcatonated

Các kết quả:

Acme, Microsoft, Apple,

2
bạn cũng có thể sử dụng COALESCE () để làm điều tương tự mà không cần phải khởi tạo biến. CHỌN @nvcConcatonated = COALESCE (@nvcConcatonated + ',', '') + CAST (C.CompanyName dưới dạng VARCHAR (255)) TỪ ...
Christopher Klein

Điều này cũng hoạt động trong một tuyên bố cập nhật. Đôi khi hữu ích để thực hiện những việc như nối danh sách ID đã được cập nhật.
EBarr

14

Nếu bạn muốn mã của một thủ tục được lưu trữ, bạn có thể:

sp_helptext 'ProcedureName'

(không chắc đây có phải là tính năng ẩn không, nhưng tôi sử dụng nó mọi lúc)


Không biết tại sao, nhưng đầu ra sp_helptext hơi ngớ ngẩn trên bất kỳ dòng quá dài nào trong bản gốc. Khi kịch bản Sprocs điều này không xảy ra, vì vậy có thể có một cơ chế xuất khẩu khác mạnh mẽ hơn? sp_helptext 'MyView' cũng hữu ích.
Kristen

Tôi không chắc ý của bạn là gì. Đối với tôi, mã SP được xuất ra với cùng định dạng mà tôi đã viết mã cho chúng trong tệp gốc (với tất cả các CR, v.v.)
Eduardo Molteni

Tôi không nhớ các chi tiết chính xác , nhưng nó liên quan đến cách lưu trữ văn bản - tôi tin điều gì đó về kích thước trang. Đầu ra chủ yếu là chính xác, nhưng cứ sau này & sau đó bạn lại có thêm một ngắt dòng.
RolandTumble

13

Một thủ tục lưu trữ được lưu trữ là bạn có thể gọi chúng từ một câu lệnh INSERT. Tôi thấy điều này rất hữu ích khi tôi đang làm việc trên cơ sở dữ liệu SQL Server.

CREATE TABLE #toto (v1 int, v2 int, v3 char(4), status char(6))
INSERT #toto (v1, v2, v3, status) EXEC dbo.sp_fulubulu(sp_param1)
SELECT * FROM #toto
DROP TABLE #toto

1
Đáng buồn thay không thể được sử dụng với @TableVariable
Kristen

Điều đau đầu với kỹ thuật rất hữu ích này là không giống như hầu hết các #tables, bạn phải xác định đầy đủ tất cả các cột. Cách lười biếng để làm điều này là tạo #table bên trong Proc mà bạn đang gọi ngay ở cuối, sau đó sp_help trong tempdb, sao chép và dán, xóa mã khỏi Proc. Xong
adolf tỏi

12

Trong SQL Server 2005/2008 để hiển thị số hàng trong kết quả truy vấn CHỌN:

SELECT ( ROW_NUMBER() OVER (ORDER BY OrderId) ) AS RowNumber,
        GrandTotal, CustomerId, PurchaseDate
FROM Orders

ĐẶT HÀNG B BYNG là một điều khoản bắt buộc. Mệnh đề OVER () yêu cầu SQL Engine sắp xếp dữ liệu trên cột được chỉ định (trong trường hợp này là OrderId) và gán các số theo kết quả sắp xếp.


sẽ không đơn giản hơn nếu họ sử dụng suger cú pháp trong công cụ sql để phân tích cú pháp từ đó thành "RowNumberInTable"
không có

1
+1 cho các chức năng của cửa sổ. Bạn có thể làm những việc trên một tập hợp con các bản ghi bằng cách sử dụng OVER (PARTITION BY ...) msdn.microsoft.com/en-us/library/ms189461%28v=SQL.100%29.aspx
Matt Stephenson

10

Hữu ích cho việc phân tích cú pháp các đối số thủ tục được lưu trữ: xp_sscanf

Đọc dữ liệu từ chuỗi vào các vị trí đối số được chỉ định bởi từng đối số định dạng.

Ví dụ sau sử dụng xp_sscanf để trích xuất hai giá trị từ chuỗi nguồn dựa trên vị trí của chúng theo định dạng của chuỗi nguồn.

DECLARE @filename varchar (20), @message varchar (20)
EXEC xp_sscanf 'sync -b -fproducts10.tmp -rrandom', 'sync -b -f%s -r%s', 
  @filename OUTPUT, @message OUTPUT
SELECT @filename, @message

Đây là tập kết quả.

-------------------- -------------------- 
products10.tmp        random

4
Tôi phải có một khoảnh khắc ngớ ngẩn (không, thực sự). Bạn có thể cho tôi biết nơi chúng ta có thể sử dụng này?
Raj Thêm

9

Ngày trở lại chỉ

Select Cast(Floor(Cast(Getdate() As Float))As Datetime)

hoặc là

Select DateAdd(Day, 0, DateDiff(Day, 0, Getdate()))

Phiên bản ngắn - CHỌN CAST (FLOOR (CAST (@DateTime AS FLOAT)) NHƯ
NGAY LẬP TỨC

Đúng rồi Quy tắc CASTFLOORCAST.
StingyJack

Không thể tìm thấy tài liệu tham khảo về nó, nhưng tôi dường như nhớ các bài kiểm tra đề xuất CHỌN DateAdd (Ngày, 0, DateDiff (Ngày, 0, @DateTime)) nhanh hơn. Hạnh phúc khi được giác ngộ, một trong hai cách!
Kristen

Đã tìm thấy sqlteam.com/forums/topic.asp?TOPIC_ID=35296#107617 nhưng nó không bao gồm phương pháp CAST / FLOOR. Một thử nghiệm không chính thức trên một bản ghi kích thước trung bình cho thấy DATEADD có thể nhanh hơn khoảng 7% so với CAST / FLOOR - không đủ để lo lắng về hầu hết các tình huống
Kristen

Tôi đã thêm phương pháp khác, tuy nhiên; thử nghiệm nhanh của tôi cho thấy phương pháp sàn đúc nhanh hơn 800 Nanos giây. Vì vậy, không có gì trong đó thực sự.
GateKiller

9

dm_db_index_usage_stats

Điều này cho phép bạn biết liệu dữ liệu trong bảng đã được cập nhật gần đây ngay cả khi bạn không có cột DateUpdated trên bảng.

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,*
FROM sys.dm_db_index_usage_stats
WHERE database_id = DB_ID( 'MyDatabase')
AND OBJECT_ID=OBJECT_ID('MyTable')

Mã từ: http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/

Thông tin được tham chiếu từ: SQL Server - Ngày / giờ của hàng được chèn cuối cùng của bảng là gì?

Có sẵn trong SQL 2005 trở lên


7

Dưới đây là một số tính năng tôi thấy hữu ích nhưng nhiều người dường như không biết về:

sp_tables

Trả về một danh sách các đối tượng có thể được truy vấn trong môi trường hiện tại. Điều này có nghĩa là bất kỳ đối tượng nào có thể xuất hiện trong mệnh đề TỪ, ngoại trừ các đối tượng đồng nghĩa.

Liên kết

sp_stored_procedures

Trả về một danh sách các thủ tục được lưu trữ trong môi trường hiện tại.

Liên kết


7

Tìm hồ sơ ngày rơi vào đâu đó trong tuần hiện tại.

where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ), 0 )

Tìm hồ sơ ngày xảy ra tuần trước.

where dateadd( week, datediff( week, 0, TransDate ), 0 ) =
dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )

Trả về ngày bắt đầu của tuần hiện tại.

select dateadd( week, datediff( week, 0, getdate() ), 0 )

Trả về ngày đầu tuần trước.

select dateadd( week, datediff( week, 0, getdate() ) - 1, 0 )

Tốt nhưng chỉ số trên TransDate sẽ không được sử dụng. Tôi thà viết
vaso

trong đó TransDate> = convert (datetime, floor (convert (float, dateadd (day, -datepart (weekday, @date) +1, @date)))) và TransDate> = convert (datetime, floor (convert (float, dateadd (ngày, 7 ngày (ngày trong tuần, @date) +1, @ ngày))))
vaso

hiệu chỉnh: trong đó TransDate> = convert (datetime, floor (convert (float, dateadd (day, -datepart (weekday, @date) +1, @date)))) và TransDate <convert (datetime, floor (convert (float, dateadd (ngày, 7 ngày (ngày trong tuần, @date) +1, @date))))
vaso

7

Không có nhiều tính năng ẩn nhưng thiết lập ánh xạ chính trong Management Studio trong Công cụ \ Tùy chọn \ Bàn phím: Alt + F1 được mặc định là sp_help "văn bản đã chọn" nhưng tôi không thể sống mà không thêm Ctrl + F1 cho sp_helptext "văn bản đã chọn"


Tôi cũng sử dụng để định cấu hình lệnh USE, để di chuyển dọc theo db
Jhonny D. Cano -Leftware-

7

Các cột được tính toán bền vững

  • Các cột được tính toán có thể giúp bạn chuyển chi phí tính toán thời gian chạy sang giai đoạn sửa đổi dữ liệu. Cột được tính được lưu trữ với phần còn lại của hàng và được sử dụng trong suốt khi biểu thức trên các cột được tính toán và truy vấn khớp. Bạn cũng có thể xây dựng các chỉ mục trên PCC để tăng tốc độ lọc và quét phạm vi trên biểu thức.

Liên kết


7

Đôi khi không có cột phù hợp để sắp xếp hoặc bạn chỉ muốn thứ tự sắp xếp mặc định trên một bảng và bạn muốn liệt kê từng hàng. Để làm điều đó, bạn có thể đặt "(chọn 1)" trong mệnh đề "order by" và bạn sẽ nhận được những gì bạn muốn. Không, hả?

select row_number() over (order by (select 1)), * from dbo.Table as t

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.