SQL सर्वर की छिपी विशेषताएं


215

SQL सर्वर की कुछ छिपी विशेषताएं क्या हैं ?

उदाहरण के लिए, अनिर्धारित प्रणाली संग्रहीत प्रक्रियाओं, उन चीजों को करने के लिए ट्रिक्स जो बहुत उपयोगी हैं लेकिन पर्याप्त दस्तावेज नहीं हैं?


जवाब

सभी महान उत्तरों के लिए सभी को धन्यवाद!

संग्रहित प्रक्रियाएं

  • sp_msforeachtable: 'के साथ एक कमांड चलाता है?' प्रत्येक तालिका नाम (v6.5 और ऊपर) के साथ प्रतिस्थापित
  • sp_msforeachdb: 'के साथ एक कमांड चलाता है?' प्रत्येक डेटाबेस नाम (v7 और ऊपर) के साथ प्रतिस्थापित
  • sp_who2: बस sp_who की तरह, लेकिन समस्या निवारण ब्लॉकों के लिए बहुत अधिक जानकारी के साथ (v7 और up)
  • sp_helptext: यदि आप एक संग्रहीत कार्यविधि का कोड चाहते हैं, तो देखें और UDF
  • sp_tables: कार्यक्षेत्र में सभी तालिकाओं और डेटाबेस के विचारों की सूची लौटाएं
  • sp_stored_procedures: सभी संग्रहीत कार्यविधियों की सूची लौटाएं
  • xp_sscanf: प्रत्येक प्रारूप तर्क द्वारा निर्दिष्ट तर्क स्थानों में स्ट्रिंग से डेटा पढ़ता है।
  • xp_fixeddrives:: सबसे बड़ी खाली जगह के साथ निश्चित ड्राइव का पता लगाएं
  • sp_help: यदि आप तालिका की संरचना, सूचकांक और बाधाओं को जानना चाहते हैं। इसके अलावा विचार और UDFs। शॉर्टकट Alt + F1 है

स्निपेट्स

  • यादृच्छिक क्रम में पंक्तियों को वापस करना
  • अंतिम संशोधित तिथि तक सभी डेटाबेस उपयोगकर्ता ऑब्जेक्ट
  • केवल दिनांक लौटें
  • उन रिकॉर्ड्स को खोजें, जो वर्तमान सप्ताह के अंदर कहीं गिरते हैं।
  • पिछले सप्ताह हुई तारीखों के रिकॉर्ड का पता लगाएं।
  • वर्तमान सप्ताह की शुरुआत के लिए तारीख लौटाता है।
  • पिछले सप्ताह की शुरुआत के लिए तारीख लौटाता है।
  • एक सर्वर पर तैनात की गई प्रक्रिया का पाठ देखें
  • डेटाबेस के लिए सभी कनेक्शन ड्रॉप करें
  • टेबल चेकसम
  • रो चेकसुम
  • एक डेटाबेस में सभी प्रक्रियाओं को छोड़ दें
  • पुनर्स्थापना के बाद लॉगिन आईडी को सही ढंग से फिर से मैप करें
  • एक INSERT बयान से संग्रहीत कार्यविधियाँ कॉल करें
  • कीवर्ड द्वारा प्रक्रियाएं खोजें
  • एक डेटाबेस में सभी प्रक्रियाओं को छोड़ दें
  • डेटाबेस के लिए प्रोग्रामेटिक रूप से ट्रांजेक्शन लॉग को क्वेरी करें।

कार्य

  • HashBytes ()
  • EncryptByKey
  • PIVOT कमांड

विविध

  • कनेक्शन स्ट्रिंग एक्स्ट्रा कलाकार
  • TableDiff.exe
  • लॉगऑन इवेंट्स के लिए ट्रिगर (सर्विस पैक 2 में नया)
  • स्थायी-संगणित-स्तंभों (pcc) के साथ प्रदर्शन को बढ़ावा देना।
  • DEFAULT_SCHEMA सेटिंग sys.database_principles में
  • मजबूर परिमाणीकरण
  • Vardecimal Storage Format
  • सेकंड में सबसे लोकप्रिय प्रश्नों का पता लगाना
  • स्केलेबल साझा डेटाबेस
  • SQL प्रबंधन स्टूडियो में टेबल / संग्रहीत प्रक्रिया फ़िल्टर सुविधा
  • ट्रेस झंडे
  • GOबैच दोहराने के बाद नंबर
  • स्कीमा का उपयोग कर सुरक्षा
  • ट्रिगर के साथ एन्क्रिप्शन फ़ंक्शन, व्यू और बेस टेबल में निर्मित एन्क्रिप्शन का उपयोग करना

4
यदि ज्ञात हो, तो प्रत्येक उत्तर के साथ लागू संस्करणों को शामिल करना अच्छा होगा। (2000 और ऊपर, 2005, 2000 केवल, आदि)
BW

इस प्रश्न में बहुत अच्छाई है। कृपया इसे हटाएं नहीं! :-)
स्किलिविज़

जवाबों:


91

प्रबंधन स्टूडियो में, आप उस समय की संख्या को दोहराए जाने के कारण बैच को समाप्त करने के लिए GO अंत-के-बैच मार्कर के बाद एक नंबर डाल सकते हैं:

PRINT 'X'
GO 10

10 बार 'X' प्रिंट करेगा। यह आपको दोहरावदार सामान करते समय थकाऊ कॉपी / चिपकाने से बचा सकता है।


70

बहुत से SQL Server डेवलपर्स को अभी भी DELETE, INSERT और UPDATE स्टेटमेंट पर OUTPUT क्लॉज़ (SQL Server 2005 और नए) के बारे में पता नहीं लगता है ।

यह जानना बेहद उपयोगी हो सकता है कि कौन सी पंक्तियाँ INSERTed, UPDATEd, या DELETEd की गई हैं, और OUTPUT खंड इसे बहुत आसानी से करने की अनुमति देता है - यह "वर्चुअल" तालिकाओं तक पहुंच insertedऔर deleted(जैसे ट्रिगर में) की अनुमति देता है:

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

यदि आप किसी तालिका में मान प्रविष्ट कर रहे हैं जिसमें एक मुख्य पहचान प्राथमिक कुंजी फ़ील्ड है, तो OUTPUT क्लॉज़ के साथ, आप सम्मिलित नई आईडी को तुरंत प्राप्त कर सकते हैं:

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

और यदि आप अपडेट कर रहे हैं, तो यह जानना बेहद उपयोगी हो सकता है कि क्या बदला है - इस मामले में, insertedनए मूल्यों (UPDATE के बाद) का प्रतिनिधित्व deletedकरता है , जबकि UPDATE से पहले पुराने मूल्यों को संदर्भित करता है:

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

यदि बहुत सारी जानकारी वापस आ जाएगी, तो OUTPUT के आउटपुट को एक अस्थायी तालिका या टेबल चर ( OUTPUT INTO @myInfoTable) पर पुनर्निर्देशित किया जा सकता है ।

अत्यंत उपयोगी - और बहुत कम ज्ञात!

न घुलनेवाली तलछट


52

sp_msforeachtable: 'के साथ एक कमांड चलाता है?' प्रत्येक तालिका नाम के साथ प्रतिस्थापित किया गया। जैसे

exec sp_msforeachtable "dbcc dbreindex('?')"

आप प्रत्येक तालिका के लिए 3 आदेश जारी कर सकते हैं

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

इसके अलावा, sp_MSforeachdb


2
आप प्रश्न चिह्न के चारों ओर एकल उद्धरणों का उपयोग करके क्वेरी में तालिका का नाम प्राप्त कर सकते हैं। sp_msforeachtable "सेलेक्ट काउंट (*), '?" से वर्जित के रूप में? "
जोडी

51

कनेक्शन स्ट्रिंग अतिरिक्त:

MultipleActiveResultSets = true

यह ADO.Net 2.0 और इसके बाद के संस्करण पढ़ा एकाधिक, फॉरवर्ड-ओनली, रीड-ओनली परिणाम एकल डेटाबेस कनेक्शन पर सेट करता है, जो यदि आप बहुत अधिक रीडिंग कर रहे हैं, तो प्रदर्शन में सुधार कर सकते हैं। यदि आप क्वेरी प्रकारों का मिश्रण कर रहे हैं तो भी आप इसे चालू कर सकते हैं।

आवेदन का नाम = MyProgramName

अब जब आप sysprocesses तालिका को क्वेरी करके सक्रिय कनेक्शनों की एक सूची देखना चाहते हैं, तो आपके प्रोग्राम का नाम ".Net SqlClient डेटा प्रदाता" के बजाय program_name कॉलम में दिखाई देगा।


7
मैंने अपनी कंपनी में एप्लिकेशन नाम एक आवश्यकता बना दिया। हर नए ऐप में एक विशिष्ट नाम होना चाहिए। नीचे ट्रैक करता है जो ऐप लॉक / कुछ बहुत आसान तोड़ दिया।
नील एन

2
एप्लिकेशन का नाम प्रोफाइलर में फ़िल्टर के रूप में भी उपलब्ध है। यह बहुत मदद करता है यदि आप केवल अपने प्रश्नों को देखना चाहते हैं न कि अपने सहकर्मियों के प्रश्नों को।
मथियास एफ

33

TableDiff.exe

  • तालिका अंतर उपकरण आपको स्रोत और गंतव्य तालिका या एक दृश्य के बीच अंतर खोजने और सामंजस्य करने की अनुमति देता है। Tablediff उपयोगिता स्कीमा और डेटा पर अंतर रिपोर्ट कर सकती है। टैबलिफ़ की सबसे लोकप्रिय विशेषता यह है कि यह एक स्क्रिप्ट उत्पन्न कर सकता है जिसे आप गंतव्य पर चला सकते हैं जो तालिकाओं के बीच के मतभेदों को समेट लेगा।

संपर्क


31

यादृच्छिक क्रम में पंक्तियों को लौटाने के लिए एक कम ज्ञात TSQL तकनीक:

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

6
छोटे परिणाम सेट के लिए बढ़िया। मैं 10000 से अधिक पंक्तियों वाली एक मेज पर तब तक इसका उपयोग नहीं करूंगा जब तक कि आपको अतिरिक्त समय नहीं मिल जाता है
जॉन शीहान

मैंने इसे मेजों की तुलना में बहुत बड़ा उपयोग किया है, और यह बहुत धीमा नहीं था।
मिच गेहूं

CHECKSUM () का उद्देश्य क्या है? आप बस NEWID द्वारा ऑर्डर कर सकते हैं ()।
जोनास लिंकन

6
मैंने भी 100,000,000 (100 मील) पंक्तियों, w / o CHECKSUM () पर अच्छे परिणाम देखे हैं। इसके अलावा, मुझे यह भी पूछना है कि न्यूआईडी द्वारा सिर्फ आदेश क्यों नहीं?
ट्रॉय डेमनब्रून

5
@ गेटकीलर: मैंने आपका संपादन वापस कर दिया है, क्योंकि चेकसम () कोई गलती नहीं है; यह सॉर्ट कॉलम के आकार को कम करता है।
मिच गेहूं

30

प्रबंधन स्टूडियो में, आप जल्दी से एक तालिका के लिए स्तंभों की अल्पविराम-सीमांकित सूची प्राप्त कर सकते हैं:

  1. ऑब्जेक्ट एक्सप्लोरर में, दिए गए तालिका के तहत नोड्स का विस्तार करें (ताकि आप कॉलम, कुंजी, बाधाएं, ट्रिगर आदि के लिए फ़ोल्डर देखेंगे)
  2. स्तंभ फ़ोल्डर को इंगित करें और एक क्वेरी में खींचें।

यह तब आसान है जब आप तालिका पर राइट-क्लिक करके और स्क्रिप्ट तालिका के रूप में चुनकर जघन्य प्रारूप का उपयोग नहीं करना चाहते हैं ... तो सम्मिलित करें ... यह चाल अन्य फ़ोल्डरों के साथ काम करती है जिसमें यह आपको देगा। फोल्डर के भीतर निहित नामों की अल्पविराम-सीमांकित सूची।


23

पंक्ति बनाने वाले

आप एकल इंसर्ट स्टेटमेंट के साथ डेटा की कई पंक्तियाँ डाल सकते हैं।

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

मैंने इसे वोट किया, लेकिन फिर इसे MSSQL 2005 में आज़माया, और यह काम नहीं करता है। 2008 ही?
richardtallent

11
हां, यह 2008 की एक नई विशेषता है।
रोब बोके

2
यह एक ऐसी सुविधा थी जो मुझे तब याद आती है जब मैं DB2 से SQL सर्वर पर आया था। DB2 में, व्यक्तिगत डालने के बयानों के बजाय इसका उपयोग करने पर एक महत्वपूर्ण गति में सुधार हुआ था
नाथन कोप

22

यदि आप तालिका संरचना, सूचकांक और बाधाओं को जानना चाहते हैं:

sp_help 'TableName'

इस टिप को इसकी शॉर्टकट कुंजी के साथ मिलाएं! सबसे पहले एक टैबलनेम को हाइलाइट करें और फिर ALT + F1
Michael J Swart

22

HashBytes () MD2, MD4, MD5, SHA, या SHA1 हैश को उसके इनपुट का वापस करना।


अच्छा है! सही लिंक है msdn.microsoft.com/en-us/library/ms174415(SQL.90).aspx (2005 संस्करण)
Sklivvz

आप सही हैं, यह डॉक्स का 2008 संस्करण था, भले ही पृष्ठ बहुत अधिक समान हों। अब तय हो गया।
जोएल कोएहॉर्न

20

सबसे लोकप्रिय प्रश्नों का पता लगाना

  • Sysinos_exec_query_stats के साथ, आप एक क्वेरी द्वारा क्वेरी विश्लेषण के कई संयोजनों का पता लगा सकते हैं।

कमोड के साथ लिंक

select * from sys.dm_exec_query_stats 
order by execution_count desc

17

7
मैंने अपने क्वेरी परिणामों में यीशु को देखा!
पी डैडी

6
Pfff ... क्या स्थानिक परिणाम टैब के साथ खिलवाड़ करने में अपना समय बर्बाद करता है। ओह रुको ... तुम्हें पता है, मुझे लगा कि पोस्ट परिचित थी, अब मुझे याद है कि क्यों।
माइकल जे। स्वार्ट

16

EXCEPT और INTERSECT

विस्तृत जोड़ और उपश्रेणियों को लिखने के बजाय, ये दो कीवर्ड दो क्वेरी परिणामों की तुलना करते समय आपकी क्वेरी के इरादे को व्यक्त करने का एक बहुत ही सुंदर और पठनीय तरीका है। SQL सर्वर 2005 के रूप में नया, वे दृढ़ता से यूनिअन को पूरक करते हैं जो पहले से ही TSQL भाषा में वर्षों से मौजूद है।

EXCEPT, INTERSECT, और UNION की अवधारणाएँ सेट थ्योरी में मौलिक हैं जो सभी आधुनिक RDBMS द्वारा उपयोग किए गए संबंधपरक मॉडलिंग के आधार और आधार के रूप में कार्य करती हैं। अब, वेन आरेख प्रकार के परिणाम TSQL का उपयोग करके अधिक सहज और काफी आसानी से उत्पन्न हो सकते हैं।


16

मुझे पता है कि यह बिल्कुल छिपा नहीं है, लेकिन बहुत से लोग PIVOT कमांड के बारे में नहीं जानते हैं । मैं एक संग्रहित प्रक्रिया को बदलने में सक्षम था जो कर्सर का उपयोग करता था और कोड के 6 सेकंड के एक त्वरित गति में चलाने के लिए 2 मिनट लेता था जो लाइनों की संख्या का दसवां हिस्सा था!


16

परीक्षण प्रयोजनों या जो भी हो, के लिए डेटाबेस बहाल करते समय उपयोगी। लॉगिन आईडी को सही ढंग से फिर से मैप करें:

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

मेरे पास यह काम पहले नहीं हुआ है, और मुझे वस्तुओं के स्वामित्व को एक अस्थायी उपयोगकर्ता में बदलना था, मूल उपयोगकर्ता को छोड़ना था, मूल को फिर से जोड़ना और स्वामित्व को वापस असाइन करना था।
ऊग

15

डेटाबेस के लिए सभी कनेक्शन छोड़ें:

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

क्या एक-लाइनर, या एक ड्रॉप डेटाबेस पैरामीटर है जो मेरे लिए ऐसा करता है? मुझे लगता है कि यदि आप ui के माध्यम से 'डेटाबेस को हटाने' का प्रयास करते हैं, तो 'नज़दीकी मौजूदा कनेक्शन' के लिए एक चेकबॉक्स है, जिसका अर्थ है कि यह एक बूलियन पैरामीटर है।
डेविन बीआर

1
दरअसल, मुझे सिर्फ एक दो लाइन का हल मिला। ALTER डेटाबेस [@ Database_Name @] सेट READ_ONLY साथ ROLLBACK तत्काल --This डिस्कनेक्ट सभी उपयोगकर्ताओं ALTER डेटाबेस [@ Database_Name @] सेट READ_WRITE साथ ROLLBACK तत्काल ड्रॉप डेटाबेस [@ Database_Name @]
DevinB

1
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATEकिसी भी नए कनेक्शन को होने से भी रोकेगा।
एरिके सेप

15

टेबल चेकसम

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

रो चेकसुम

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

2
ये आपको तालिका के सभी डेटा के लिए एक चेकसम का उत्पादन करने की अनुमति देते हैं। यह जाँचने का एक सरल और त्वरित तरीका है कि क्या दो पंक्तियाँ या दो तालिकाएँ समान हैं।
गेटकिलर

15

मुझे यकीन नहीं है कि यह एक छिपी हुई विशेषता है या नहीं, लेकिन मैंने इस पर ठोकर खाई है, और इसे कई अवसरों पर उपयोगी पाया है। आप कर्सर का उपयोग करने और चुनिंदा कथन के माध्यम से लूप करने के बजाय किसी एकल चयन कथन में फ़ील्ड के एक समूह को समेट सकते हैं।

उदाहरण:

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

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

SELECT @nvcConcatonated

परिणाम:

Acme, Microsoft, Apple,

2
आप वैरिएबल को इनिशियलाइज़ करने की आवश्यकता के बिना ही COALESCE () का उपयोग कर सकते हैं। चयन @nvcConcatonated = COALESCE (@nvcConcatonated + ',' ',') + कास्ट (C.CompanyName के रूप में VARCHAR (255)) से ...
क्रिस्टोफर क्लेन

यह अपडेट स्टेटमेंट में भी काम करता है। कभी-कभी आईडी की एक सूची को अपडेट करने जैसे काम करने के लिए उपयोगी होते हैं जिन्हें अपडेट किया गया था।
21

14

यदि आप एक संग्रहीत कार्यविधि का कोड चाहते हैं:

sp_helptext 'ProcedureName'

(सुनिश्चित नहीं है कि यह छिपी हुई विशेषता है, लेकिन मैं इसका हर समय उपयोग करता हूं)


पता नहीं क्यों, लेकिन sp_helptext उत्पादन मूल में किसी भी लंबी लाइनों पर थोड़ा नासमझ है। जब स्क्रिप्टिंग स्पोक्स होता है तो ऐसा नहीं होता है, इसलिए हो सकता है कि एक और, अधिक मजबूत, निर्यात तंत्र हो? sp_helptext 'MyView' भी उपयोगी है।
क्रिस्टन

मुझे नहीं पता तुम्हारा क्या मतलब है। मेरे लिए, SPs कोड एक ही प्रारूप के साथ आउटपुट किए जाते हैं जो मैंने उन्हें मूल फ़ाइल (सभी CRs, आदि के साथ) में स्क्रिप्ट किया है
Eduardo Molteni

मुझे सटीक विवरण याद नहीं है , लेकिन यह पाठ को संग्रहीत करने के तरीके के साथ करना है - पृष्ठ आकार के बारे में कुछ, मुझे विश्वास है। आउटपुट ज्यादातर सही है, लेकिन हर बार और फिर आपको एक अतिरिक्त लाइन ब्रेक मिलता है।
रोलैंडटंबल

13

एक संग्रहीत कार्यविधि ट्रिक यह है कि आप उन्हें INSERT स्टेटमेंट से कॉल कर सकते हैं। मुझे यह बहुत उपयोगी लगा जब मैं एक SQL सर्वर डेटाबेस पर काम कर रहा था।

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
अफसोस की बात @TableVariable
क्रिस्टन

इस बहुत उपयोगी तकनीक के साथ दर्द यह है कि अधिकांश #tables के विपरीत, आपको सभी स्तंभों को पूरी तरह से परिभाषित करना होगा। ऐसा करने का आलसी तरीका यह है कि जिस खरीद को आप अंत में कॉल कर रहे हैं, उसके अंदर #table बनाएं, फिर tempdb में sp_help, कॉपी और पेस्ट करें, proc से कोड हटा दें। संपन्न
adolf लहसुन

12

SQL सर्वर 2005/2008 में एक पंक्ति क्वेरी परिणाम में पंक्ति संख्या दिखाने के लिए:

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

ORDER BY एक अनिवार्य क्लॉज है। OVER () क्लॉज SQL इंजन को निर्दिष्ट कॉलम (इस मामले में OrderId) पर डेटा को सॉर्ट करने और सॉर्ट परिणामों के अनुसार नंबर असाइन करने के लिए कहता है।


सरल नहीं होगा यदि वे sql इंजन में वाक्यविन्यास suger का उपयोग करते हुए इसे वाक्य रचना शब्द "RowNumberInTable" के रूप में पार्स करें
कोई भी

1
विंडो कार्यों के लिए +1। तुम पर (विभाजन से ...) का उपयोग करके रिकॉर्ड के सबसेट से अधिक कर सकते हैं msdn.microsoft.com/en-us/library/ms189461%28v=SQL.100%29.aspx
मैट स्टीफेंसन

10

संग्रहीत कार्यविधि तर्कों को पार्स करने के लिए उपयोगी: xp_sscanf

प्रत्येक प्रारूप तर्क द्वारा निर्दिष्ट तर्क स्थानों में स्ट्रिंग से डेटा पढ़ता है।

निम्न उदाहरण xp_sscanf का उपयोग स्रोत स्ट्रिंग के प्रारूप में उनके पदों के आधार पर स्रोत स्ट्रिंग से दो मान निकालने के लिए करता है।

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

यहाँ परिणाम सेट है।

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

4
मुझे एक गूंगा क्षण होना चाहिए (नहीं, वास्तव में)। क्या आप मुझे बता सकते हैं कि हम इसका उपयोग कहां कर सकते हैं?
राज मोरे

9

केवल दिनांक लौटें

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

या

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

लघु संस्करण - SELECT CAST (FLOOR (CAST (@DateTime AS FLOAT)) AS DATETIME)
Meff

अरे हाँ। CASTFLOORCAST नियम।
स्टिंगजैक

इसका एक संदर्भ नहीं मिल सकता है, लेकिन मुझे ऐसे परीक्षण याद हैं जो सुझाते हैं कि SELECT DateAdd (दिन, 0, DateDiff (दिन, 0, @DateTime)) तेज था। प्रबुद्ध होने के लिए खुश, दोनों तरह से!
क्रिस्टन

यह sqlteam.com/forums/topic.asp?TOPIC_ID=35296#107617 मिला, लेकिन इसमें CAST / FLOOR विधि शामिल नहीं थी। मध्यम आकार के रिकॉर्डसेट पर एक अनौपचारिक परीक्षण से पता चलता है कि DATEADD CAST / FLOOR की तुलना में लगभग 7% तेज हो सकता है
क्रिस्टन

मैंने दूसरी विधि जोड़ी है, हालाँकि; मेरे त्वरित परीक्षण से पता चलता है कि कास्ट फ्लोर विधि 800 नैनोसेकंड तेज है। तो वास्तव में इसमें कुछ भी नहीं।
गेटकीलर

9

dm_db_index_usage_stats

यह आपको यह जानने की अनुमति देता है कि क्या टेबल पर डेटा हाल ही में अपडेट किया गया है, भले ही आपके पास टेबल पर डेटअपडेटेड कॉलम न हो।

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')

से कोड: http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/

से संदर्भित जानकारी: SQL सर्वर - किसी तालिका की अंतिम सम्मिलित पंक्ति की तारीख / समय क्या है?

SQL 2005 और बाद में उपलब्ध है


7

यहाँ कुछ विशेषताएं हैं जो मुझे उपयोगी लगती हैं लेकिन बहुत से लोगों को इसके बारे में पता नहीं है:

sp_tables

उन वस्तुओं की सूची लौटाता है जिन्हें वर्तमान परिवेश में परिमार्जित किया जा सकता है। इसका मतलब है कि कोई भी वस्तु जो पर्यायवाची वस्तुओं को छोड़कर FROM क्लॉज में दिखाई दे सकती है।

संपर्क

sp_stored_procedures

वर्तमान परिवेश में संग्रहीत प्रक्रियाओं की सूची लौटाता है।

संपर्क


7

उन रिकॉर्ड्स को खोजें, जो वर्तमान सप्ताह के अंदर कहीं गिरते हैं।

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

पिछले सप्ताह हुई तारीखों के रिकॉर्ड का पता लगाएं।

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

वर्तमान सप्ताह की शुरुआत के लिए तारीख लौटाता है।

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

पिछले सप्ताह की शुरुआत के लिए तारीख लौटाता है।

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

TransDate पर ठीक लेकिन इंडेक्स का उपयोग नहीं किया जाएगा। मैं बल्कि लिखूंगा
vaso

जहाँ TransDate> = Convert (डेटाटाइम, फ़्लोर (कन्वर्ट, फ्लोट, डेटेड (दिन, -डेटाट, @date) +1, @date))) और TransDate> = कन्वर्ट (डेटाटाइम, फ़्लोर (डेटाट, डेटेड) (दिन, 7-तारीख (कार्यदिवस, @ दिन) +1, @डेट)))
वासो

सुधार: जहां ट्रांसडेट> = कन्वर्ट (डेटाटाइम, फ़्लोर (कन्वर्ट, फ़्लोट, डेटेड (दिन, -दिन, @ दिन, +1, @ दिन))) और ट्रांसडेट <कन्वर्ट (डेटाटाइम, फ़्लोर (कन्वर्ट) डेटेड (दिन, 7-प्रतिपक्ष (कार्यदिवस, @ दिन) +1, @डेट)))
वासो

7

इतना छिपा फ़ीचर नहीं है लेकिन टूल \ Options \ कीबोर्ड के तहत मैनेजमेंट स्टूडियो में कुंजी मैपिंग सेट करना: Alt + F1 को sp_help "चयनित पाठ" के लिए डिफ़ॉल्ट रूप से रखा गया है, लेकिन मैं sp_helptext "चयनित पाठ" के लिए Ctrl + F1 जोड़ने के बिना नहीं रह सकता


मैं db के साथ जाने के लिए USE कमांड को कॉन्फ़िगर करने के लिए भी उपयोग करता हूं
Jhonny D. Cano -Leftware-

7

कायम-परिकलित-स्तंभ

  • गणना किए गए कॉलम आपको डेटा संशोधन चरण में रनटाइम कम्प्यूटेशन लागत को स्थानांतरित करने में मदद कर सकते हैं। गणना किए गए कॉलम को शेष पंक्ति के साथ संग्रहित किया जाता है और गणना किए गए कॉलम और क्वेरी से मेल खाने पर अभिव्यक्ति का पारदर्शी रूप से उपयोग किया जाता है। आप एक्सप्रेशन को बढ़ाने और एक्सप्रेशन पर रेंज स्कैन करने के लिए पीसीसी पर इंडेक्स भी बना सकते हैं।

संपर्क


7

कई बार ऐसा होता है कि कोई सॉर्ट करने के लिए उपयुक्त कॉलम नहीं होता है, या आप बस एक टेबल पर डिफॉल्ट सॉर्ट ऑर्डर चाहते हैं और आप प्रत्येक पंक्ति को एन्यूमरेट करना चाहते हैं। ऐसा करने के लिए कि आप "क्रम में" (1 का चयन करें) "खंड" द्वारा कर सकते हैं और आपको वही मिलेगा जो आप चाहते हैं। नीट, एह?

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.