क्या कोई TSQL चर स्थिर बनाने का कोई तरीका है?क्या TSQL चर स्थिर बनाने का कोई तरीका है?
उत्तर
नहीं, लेकिन आप वहां एक फ़ंक्शन बना सकते हैं और इसे हार्डकोड कर सकते हैं और इसका उपयोग कर सकते हैं।
यहाँ एक उदाहरण है:
CREATE FUNCTION fnConstant()
RETURNS INT
AS
BEGIN
RETURN 2
END
GO
SELECT dbo.fnConstant()
डेटाबेस साहित्य में "निरंतर बनाना" जैसी कोई चीज़ नहीं है। कॉन्स्टेंट मौजूद हैं क्योंकि वे हैं और अक्सर मूल्य कहा जाता है। कोई एक चर घोषित कर सकता है और इसे एक मान (स्थिर) असाइन कर सकता है। एक शैक्षिक दृश्य से:
DECLARE @two INT
SET @two = 2
यहाँ एक चर @two है और 2 एक मूल्य/स्थिर है।
माइकल डी और जॉन निल्सन के प्रदर्शन को बढ़ावा देने के लिए भी प्रयास करें। –
नहीं, लेकिन अच्छे पुराने नामकरण सम्मेलनों इस्तेमाल किया जाना चाहिए।
declare @MY_VALUE as int
वैसे यह वास्तव में पुराना है। ऐसा क्यों लगता है कि यह अच्छा है? –
@VictorYarema क्योंकि कभी-कभी सम्मेलन की आपको आवश्यकता होती है। और क्योंकि कभी-कभी आपके पास कोई अन्य अच्छी पसंद नहीं होती है। अब, उस तरफ, SQLMenace का उत्तर बेहतर दिखता है, मैं आपके साथ सहमत हूं। फिर भी, कार्यों के नाम को स्थिरांक, आईएमओ के लिए सम्मेलन का पालन करना चाहिए। इसे 'FN_CONSTANT() 'नाम दिया जाना चाहिए। इस तरह यह स्पष्ट है कि यह क्या कर रहा है। – tfrascaroli
यह अकेले ही आपकी सहायता नहीं करेगा जब आप प्रदर्शन लाभ चाहते हैं। माइकल डी और जॉन निल्सन के प्रदर्शन को बढ़ावा देने के लिए भी जवाब दें। –
ठीक है नहीं, देखें
स्थिरांक अपरिवर्तनीय मान जो संकलन समय पर जाना जाता है और कार्यक्रम
मतलब है कि आप एसक्यूएल सर्वर में एक निरंतर कभी नहीं हो सकता के जीवन के लिए परिवर्तन नहीं करते
declare @myvalue as int
set @myvalue = 5
set @myvalue = 10--oops we just changed it
मूल्य सिर्फ
कोई है बदला टी-एसक्यूएल में स्थिरांक के लिए अंतर्निहित समर्थन। आप इसे अनुकरण करने के लिए SQLMenace के दृष्टिकोण का उपयोग कर सकते हैं (हालांकि आप कभी भी यह सुनिश्चित नहीं कर सकते कि किसी और ने फ़ंक्शन को कुछ और वापस करने के लिए ओवरराइट किया है ...), या संभावित रूप से स्थिरांक वाली एक तालिका लिखें, as suggested over here। शायद एक ट्रिगर लिखें जो ConstantValue
कॉलम में किसी भी बदलाव को वापस लाता है?
लापता कॉन्सन्स के लिए मेरा कामकाज अनुकूलक के मूल्य के बारे में संकेत देना है।
DECLARE @Constant INT = 123;
SELECT *
FROM [some_relation]
WHERE [some_attribute] = @Constant
OPTION(OPTIMIZE FOR (@Constant = 123))
इस क्वेरी संकलक चर के इलाज के लिए जैसे कि यह एक निरंतर था जब निष्पादन योजना बनाने में बताता है। नीचे की ओर यह है कि आपको मूल्य को दो बार परिभाषित करना होगा।
सबसे अच्छा उत्तर SQLMenace से आवश्यकता के अनुसार है यदि स्क्रिप्ट के भीतर उपयोग के लिए अस्थायी स्थिरता बनाना है, यानी कई गो स्टेटमेंट/बैचों में।
बस tempdb में प्रक्रिया बनाएं, फिर आपके पास लक्षित डेटाबेस पर कोई प्रभाव नहीं पड़ता है।
इसका एक व्यावहारिक उदाहरण डेटाबेस बनाने वाली स्क्रिप्ट है जो लॉजिकल स्कीमा संस्करण वाली स्क्रिप्ट के अंत में नियंत्रण मान लिखता है। फ़ाइल के शीर्ष पर परिवर्तन इतिहास आदि के साथ कुछ टिप्पणियां हैं ... लेकिन व्यवहार में अधिकांश डेवलपर्स फ़ाइल के निचले हिस्से में स्कीमा संस्करण को स्क्रॉल और अपडेट करना भूल जाएंगे।
उपर्युक्त कोड का उपयोग डेटाबेस स्क्रिप्ट (एसएसएमएस की जेनरेट स्क्रिप्ट्स फीचर से कॉपी) से पहले शीर्ष पर परिभाषित एक दृश्यमान स्कीमा संस्करण निरंतर डेटाबेस को बनाता है लेकिन अंत में उपयोग किया जाता है। यह परिवर्तन इतिहास और अन्य टिप्पणियों के बगल में डेवलपर के चेहरे पर सही है, इसलिए उन्हें अपडेट करने की संभावना है।
उदाहरण के लिए:
use tempdb
go
create function dbo.MySchemaVersion()
returns int
as
begin
return 123
end
go
use master
go
-- Big long database create script with multiple batches...
print 'Creating database schema version ' + CAST(tempdb.dbo.MySchemaVersion() as NVARCHAR) + '...'
go
-- ...
go
-- ...
go
use MyDatabase
go
-- Update schema version with constant at end (not normally possible as GO puts
-- local @variables out of scope)
insert MyConfigTable values ('SchemaVersion', tempdb.dbo.MySchemaVersion())
go
-- Clean-up
use tempdb
drop function MySchemaVersion
go
किसी SQL समारोह निम्नलिखित स्क्रिप्ट चलाने के प्रदर्शन में अंतर को देखने के लिए प्रयोग से पूर्व:
IF OBJECT_ID('fnFalse') IS NOT NULL
DROP FUNCTION fnFalse
GO
IF OBJECT_ID('fnTrue') IS NOT NULL
DROP FUNCTION fnTrue
GO
CREATE FUNCTION fnTrue() RETURNS INT WITH SCHEMABINDING
AS
BEGIN
RETURN 1
END
GO
CREATE FUNCTION fnFalse() RETURNS INT WITH SCHEMABINDING
AS
BEGIN
RETURN ~ dbo.fnTrue()
END
GO
DECLARE @TimeStart DATETIME = GETDATE()
DECLARE @Count INT = 100000
WHILE @Count > 0 BEGIN
SET @Count -= 1
DECLARE @Value BIT
SELECT @Value = dbo.fnTrue()
IF @Value = 1
SELECT @Value = dbo.fnFalse()
END
DECLARE @TimeEnd DATETIME = GETDATE()
PRINT CAST(DATEDIFF(ms, @TimeStart, @TimeEnd) AS VARCHAR) + ' elapsed, using function'
GO
DECLARE @TimeStart DATETIME = GETDATE()
DECLARE @Count INT = 100000
DECLARE @FALSE AS BIT = 0
DECLARE @TRUE AS BIT = ~ @FALSE
WHILE @Count > 0 BEGIN
SET @Count -= 1
DECLARE @Value BIT
SELECT @Value = @TRUE
IF @Value = 1
SELECT @Value = @FALSE
END
DECLARE @TimeEnd DATETIME = GETDATE()
PRINT CAST(DATEDIFF(ms, @TimeStart, @TimeEnd) AS VARCHAR) + ' elapsed, using local variable'
GO
DECLARE @TimeStart DATETIME = GETDATE()
DECLARE @Count INT = 100000
WHILE @Count > 0 BEGIN
SET @Count -= 1
DECLARE @Value BIT
SELECT @Value = 1
IF @Value = 1
SELECT @Value = 0
END
DECLARE @TimeEnd DATETIME = GETDATE()
PRINT CAST(DATEDIFF(ms, @TimeStart, @TimeEnd) AS VARCHAR) + ' elapsed, using hard coded values'
GO
यह काफी पुराना है, लेकिन संदर्भ के लिए मेरे सर्वर पर निष्पादित होने पर परिणाम यहां दिया गया है: | फंक्शन का उपयोग कर '2760ms समाप्त हो गया '| स्थानीय चर का उपयोग करते हुए '2300ms समाप्त हो गया। हार्ड कोडित मानों का उपयोग करके '2286ms समाप्त हो गया '| – z00l
एक देव लैपटॉप पर, स्कीमा बाध्यकारी के बिना दो अतिरिक्त कार्यों के साथ। '' '5570 फंक्शन '' '| का उपयोग कर समाप्त हो गया '' 406 विलुप्त हो गया, स्थानीय चर का उपयोग कर'' | हार्ड कोडित मानों का उपयोग करके '383 समाप्त हो गया '' '' 3893 समाप्त हो गया, स्कीमैबंडिंग के बिना फ़ंक्शन का उपयोग करके ' – user1778606
तुलना के लिए, एक साधारण चयन कथन में 4110ms लगे, जहां चयन कथन कोड 'val' से शीर्ष 1 @m = cv_val के बीच बदलते हैं जहां cv_id = 'C101'' '' और वही '' '... 'सी201'' '' जहां कोड_वॉल्यूज़ 250 वर्रों के साथ शब्दकोश तालिका है, वहां SQL-Server 2016 – user1778606
उपयोग छद्म स्थिरांक: http://blogs.msdn.com/b/sql_server_appendix_z/archive/2013/09/16/sql-server-variables-parameters-or-literals-or-constants.aspx
छद्म-स्थिरांक चर या पैरामीटर नहीं हैं। इसके बजाए, वे बस एक पंक्ति के साथ विचार करते हैं, और आपके स्थिरांक का समर्थन करने के लिए पर्याप्त कॉलम हैं। इन सरल नियमों के साथ, SQL इंजन पूरी तरह से दृश्य के मूल्य को अनदेखा करता है लेकिन फिर भी मान के आधार पर निष्पादन योजना बनाता है। निष्पादन योजना दृश्य में शामिल होने को भी नहीं दिखाती है!
यदि आप परिवर्तनीय में किसी मान के लिए इष्टतम निष्पादन योजना प्राप्त करने में रुचि रखते हैं तो आप गतिशील एसक्यूएल कोड का उपयोग कर सकते हैं। यह परिवर्तनीय स्थिर बनाता है।
DECLARE @var varchar(100) = 'some text'
DECLARE @sql varchar(MAX)
SET @sql = 'SELECT * FROM table WHERE col = '''[email protected]+''''
EXEC (@sql)
पर सभी थे, इस तरह मैं इसे करता हूं और यह उन प्रश्नों के लिए एक बड़ा प्रदर्शन बढ़ावा देता है जिनमें स्थिरांक शामिल हैं । –
enums या साधारण स्थिरांक के लिए, एक ही पंक्ति के साथ एक दृश्य के शानदार प्रदर्शन किया है और समय संकलन जाँच/निर्भरता ट्रैकिंग (इसके कारण एक स्तंभ नाम)
देखें जारेड Ko के ब्लॉग पोस्ट https://blogs.msdn.microsoft.com/sql_server_appendix_z/2013/09/16/sql-server-variables-parameters-or-literals-or-constants/
दृश्य
CREATE VIEW ShipMethod.ShipMethodID AS
SELECT CAST(1 AS INT) AS [XRQ - TRUCK GROUND]
,CAST(2 AS INT) AS [ZY - EXPRESS]
,CAST(3 AS INT) AS [OVERSEAS - DELUXE]
, CAST(4 AS INT) AS [OVERNIGHT J-FAST]
,CAST(5 AS INT) AS [CARGO TRANSPORT 5]
उपयोग दृश्य बनाने
SELECT h.*
FROM Sales.SalesOrderHeader h
JOIN ShipMethod.ShipMethodID const
ON h.ShipMethodID = const.[OVERNIGHT J-FAST]
चूंकि स्थिरांक के लिए समर्थन में कोई निर्माण नहीं है, इसलिए मेरा समाधान बहुत आसान है।
इस के बाद से समर्थित नहीं है:
Declare Constant @supplement int = 240
SELECT price + @supplement
FROM what_does_it_cost
मैं बस यह
SELECT price + 240/*CONSTANT:supplement*/
FROM what_does_it_cost
जाहिर करने के लिए बदल जाएगा, इस पूरी बात पर निर्भर करता है होना करने के लिए (मूल्य अंतरिक्ष और टिप्पणी अनुगामी के बिना) अद्वितीय। वैश्विक खोज और प्रतिस्थापन के साथ इसे बदलना संभव है।
- 1. तुलना ऑपरेटर को एक चर बनाने का कोई तरीका है?
- 2. क्या कोई सेट बनाने का कोई त्वरित तरीका है?
- 3. tsql: स्ट्रिंग प्रकार में चर डालने का सबसे अच्छा तरीका?
- 4. क्या सी # बाध्यकारी कार्य स्थिर रूप से बनाने का कोई तरीका है?
- 5. क्या सी में कार्य परमाणु बनाने का कोई तरीका है? ।
- 6. क्या Celery/RabbitMQ लगातार बनाने का कोई तरीका है?
- 7. क्या Python में कक्षा संपत्ति बनाने का कोई तरीका है?
- 8. क्या सरलजसन को कम सख्त बनाने का कोई तरीका है?
- 9. क्या कोडनिर्देशक पर सबडोमेन बनाने का कोई आसान तरीका है?
- 10. क्या Emacs में "प्रोजेक्ट फ़ाइल" बनाने का कोई तरीका है?
- 11. जावा में कोई तारीख बनाने का सही तरीका क्या है?
- 12. क्या टीएफएस को जोड़ने योग्य बनाने का कोई तरीका है?
- 13. क्या आपका अपना HTML तत्व बनाने का कोई तरीका है?
- 14. क्या जावास्क्रिप्ट लुकअप टेबल बनाने का कोई आसान तरीका है?
- 15. क्या एक्जिक्यूटर्स सर्विस को रिकर्सिवली बनाने का कोई तरीका है?
- 16. क्या "रेक मार्ग" को बेहतर बनाने का कोई तरीका है?
- 17. क्या jQuery आउटपुट * वास्तविक मार्कअप * बनाने का कोई तरीका है?
- 18. क्या आईपैड सिम्युलेटर को बड़ा बनाने का कोई तरीका है?
- 19. क्या पहले से सशर्त बनाने का कोई तरीका है?
- 20. क्या Rails ActiveRecord निजी गुण बनाने का कोई तरीका है?
- 21. क्या सी # में अनाम structs बनाने का कोई तरीका है?
- 22. क्या एक्लिप्स स्वचालित रूप से मेरे सभी चर अंतिम बनाने का कोई तरीका है?
- 23. क्या सी में एक चर लंबाई के साथ एक सरणी बनाने का कोई तरीका है?
- 24. क्या फायरबर्ड संग्रहीत प्रो के अंदर स्थानीय टेबल चर बनाने का कोई तरीका है?
- 25. क्या कोई डायनामिक ऑब्जेक्ट बनाने का कोई तरीका है जो इंटरफ़ेस का समर्थन करता है?
- 26. Kinetic.js बनाने का कोई तरीका IE8 का समर्थन करता है?
- 27. jQuery.inArray() केस असंवेदनशील बनाने का कोई तरीका?
- 28. {% विस्तार '...'%} सशर्त बनाने का कोई तरीका? - Django
- 29. क्या रनटाइम-निर्धारित नाम के साथ कोई फ़ंक्शन बनाने का कोई गैर-eval तरीका है?
- 30. पीडीओ mysql स्थिर कनेक्शन वर्ग बनाने का सबसे अच्छा तरीका?
'SCHEMABINDING के साथ ** ** ** इसे इसे' असली 'स्थिरता में बदलना चाहिए (यूडीएफ को एसक्यूएल में निर्धारक के रूप में देखा जाना चाहिए)। अर्थात। इसे कैश किया जाना चाहिए। फिर भी, +1। –