डायनामिक एसक्यूएल उस तरह काम नहीं करता है।
आप अभी भी एक गतिशील स्ट्रिंग को पैरामीटर पास नहीं कर सकते हैं जिसका उपयोग ऑब्जेक्ट नामों के स्थान पर किया जाएगा।
आपको मैन्युअल रूप से @DBName
. की जगह, क्वेरी स्ट्रिंग का निर्माण स्वयं करना होगा वास्तविक मूल्य के साथ। हालांकि, आप बिना किसी उद्धरण के समीकरण के दाईं ओर एक पैरामीटर का उपयोग कर सकते हैं।
साथ ही, किसी ऑब्जेक्ट का नाम किसी क्वेरी में डालते समय, हमेशा QUOTENAME
समारोह। यह नाम से सही ढंग से बच जाएगा ताकि किसी ऑब्जेक्ट के नाम में कुछ वर्णों के कारण कोई sql इंजेक्शन या अवांछित व्यवहार न हो।
SET @sql = N' IF EXISTS (SELECT NAME FROM master.sys.databases sd where name = @DBName)
BEGIN
ALTER DATABASE ' + quotename(@DBName, '[') + N' SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE ' + quotename(@DBName, '[') + N' SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DROP DATABASE ' + quotename(@DBName, '[') + N'
END';