से डायनामिक एसक्यूएल कॉल करें मैं एक फ़ंक्शन लिख रहा हूं जो एक टेबल लौटाता है। फ़ंक्शन में पास किए गए दो पैरामीटर हैं और एक क्वेरी को बनाया और निष्पादित किया जाता है और लौटने वाली तालिका में डाला जाता है। हालांकि मुझे यह त्रुटि मिल रही है।फ़ंक्शन
केवल फ़ंक्शंस और कुछ विस्तारित संग्रहीत प्रक्रियाओं को फ़ंक्शन के भीतर से निष्पादित किया जा सकता है।
मैं संग्रहीत प्रक्रिया का उपयोग नहीं करना चाहता क्योंकि यह एक साधारण उपयोगिता कार्य है। क्या किसी को पता है कि यह किया जा सकता है। मेरा फ़ंक्शन नीचे कोड किया गया है, यह किसी निश्चित तालिका के भीतर किसी निश्चित कॉलम के लिए डुप्लिकेट की जांच करता है।
-- =============================================
-- AUTHOR: JON AIREY
-- THIS FUNCTION WILL RETURN A COUNT OF HOW MANY
-- TIMES A CERTAIN COLUMN VALUE APPEARS IN A
-- TABLE. THIS IS HELPFUL FOR FINDING DUPES.
-- THIS FUNCTION WILL ACCEPT A COLUMN NAME, TABLE
-- NAME (MUST INCLUDE SCHEMA), AND OPTIONAL
-- DATABASE TO USE. RESULTS WILL BE RETURNED AS
-- A TABLE.
-- =============================================
ALTER FUNCTION [dbo].[fn_FindDupe]
(
-- Add the parameters for the function here
@Column VARCHAR(MAX),
@Table VARCHAR(100),
@Database VARCHAR(100) = ''
)
RETURNS
@TempTable TABLE
([Column] varchar(100)
,[Count] int)
AS
BEGIN
DECLARE @SQL VARCHAR(MAX)
SET @Table = CASE
WHEN @Database = ''
THEN @Table
ELSE @Database + '.' + @Table
END
SET @SQL =
'
INSERT INTO @TempTable
SELECT ' + @Column + '
,COUNT(' + @Column + ') AS CNT
FROM ' + @Table + '
GROUP BY ' + @Column + '
ORDER BY CNT DESC
'
EXEC SP_EXECUTESQL @SQL
RETURN
END
GO
मैं इसे सीएलआर फ़ंक्शन कैसे बना सकता हूं? – JBone
[कैसे करें: एक सीएलआर SQL सर्वर उपयोगकर्ता-परिभाषित फ़ंक्शन बनाएं और चलाएं] (http://msdn.microsoft.com/en-us/library/w2kae45k (v = vs.80) .aspx) –
'चूंकि आप कर सकते हैं डायनामिक एसक्यूएल से कुछ भी करें, अपडेट सहित, यह स्पष्ट है कि डायनामिक एसक्यूएल की अनुमति क्यों नहीं है। ', यह सही है। लेकिन साथ ही आपको अपने गतिशील एसक्यूएल को उदाहरण के साथ पार्स करना होगा। sp_executesql(), इसलिए SQL सर्वर में डेटा बदलने वाले प्रश्नों को पकड़ने और दूसरों को पास करने की हर संभावना है। तो असली कारण है - उन्होंने इसे लागू करने के लिए परेशान नहीं किया? –