গতিশীল এসকিএল সহ নির্দিষ্ট ডাটাবেসে ভিউ তৈরি করবেন?


16

আমি বিভিন্ন ডাটাবেসে ড্রপ এবং ভিউ তৈরি করতে একটি গতিশীল স্কয়ার লিখছি।

সুতরাং আমি লিখেছি:

set @CreateViewStatement = 
                '
                USE ['+ @DB +'];
                CREATE VIEW [dbo].[MyTable]
                AS

                SELECT ........something
exec (@CreateViewStatement)

এটি আমার ত্রুটি দেয়:

'ক্রিয়েট ভিউ' অবশ্যই কোয়েরি ব্যাচের প্রথম বিবৃতি হতে হবে।

আমি যদি ইউএসই ডেটাবেস স্টেটমেন্টটি সরিয়ে ফেলি তবে এটি ভাল কাজ করে, তবে ডাটাবেসটি আর নির্দিষ্ট করা হয় না ....

কিভাবে আমি এই সমস্যার সমাধান করতে পারে?

উত্তর:


25

আপনি নেস্টেড EXECকলগুলি ব্যবহার করতে পারেন । ডাটাবেস প্রসঙ্গটি USEচাইল্ড ব্যাচে স্থির থাকে।

DECLARE @DB SYSNAME

SET @DB = 'tempdb'

DECLARE @CreateViewStatement NVARCHAR(MAX) 
SET @CreateViewStatement = '
      USE '+ QUOTENAME(@DB) +';
      EXEC(''
             CREATE VIEW [dbo].[MyTable] AS
             SELECT 1 AS [Foo]
      '')

                          '
EXEC (@CreateViewStatement)

1
+1 - যদি আপনি এসএমও ব্যবহার করে মতামতগুলি স্ক্রিপ্ট করে থাকেন তবে ফ্রেমওয়ার্কটি এটি
যেমনভাবে হয়

1
@ কিংচান - আপনি উভয়ই এফওয়াইআইকে উত্সাহিত করতে এবং গ্রহণ করতে পারেন;)
জেএনকে

@ জেএনকে +1 অবশ্যই ~ :)
কিং চ্যান

অবশ্যই কাজ !! যদিও আমি এটি ব্যবহার করেছি, নেস্টেড ক্যোয়ারির অভ্যন্তরে অনেকগুলি পরিবর্তনশীল তাই কোট হ্যান্ডলিংয়ের আমি মাথা ব্যাথা করছিলাম! দুর্দান্ত সমাধান যদিও!

আপনি একজন নায়ক আপনার পরে আমার প্রথম সন্তানের নাম রাখবেন।
জেনস

-1

এই ক্ষেত্রে চালিত হওয়ার সময় আমি যেভাবে পরিচালনা করেছি তা ব্যবহারের বিবৃতি দেওয়ার পরে জিও রাখছে।

set @CreateViewStatement = 
'
  USE ['+ @DB +']; GO
  CREATE VIEW [dbo].[MyTable]
  AS

  SELECT ........something'
exec (@CreateViewStatement)

ঠিক তাই আপনি জানেন যে, জিও স্ট্যাটমেন্ট কার্যকর হবে না
কিং চ্যান

2
এটি গতিশীল এসকিউএল প্রসঙ্গে কাজ করবে না। GOক্লায়েন্ট সরঞ্জামগুলিতে একটি ব্যাচ ডিলিমিটার একটি টিএসকিউএল কীওয়ার্ড নয়।
মার্টিন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.