PDA

View Full Version : مشکل با Declare



irpersian20
جمعه 25 اسفند 1391, 12:31 عصر
سلام
این کوئری ببنیدی لطفا


USE AdventureWorks2012; GO DECLARE @find varchar(30); /* Also allowed: DECLARE @find varchar(30) = 'Man%'; */ SET @find = 'Man%'; SELECT p.LastName, p.FirstName, ph.PhoneNumber FROM Person.Person AS p JOIN Person.PersonPhone AS ph ON p.BusinessEntityID = ph.BusinessEntityID WHERE LastName LIKE @find;با این نتایجش هیچ فرق نداره
پس کاربردش چیه؟
Declare به چه کاربردی هست؟
USE AdventureWorks2008R2;
GO

/* Also allowed:
DECLARE @find varchar(30) = 'Man%';
*/

SELECT p.LastName, p.FirstName, ph.PhoneNumber
FROM Person.Person AS p
JOIN Person.PersonPhone AS ph ON p.BusinessEntityID = ph.BusinessEntityID
WHERE LastName LIKE 'Man%';

website.expert
جمعه 25 اسفند 1391, 15:23 عصر
سلام؛
خب DECLARE برای تعریف و اعلان متغیر استفاده میشه،
کوئری که شما گذاشتید منظورش اینه که:
به جای این :
DECLARE @find VARCHAR(30)
SET @find = 'Man%'
میشه به این صورت هم نوشت:
DECLARE @find varchar(30) = 'Man%'
منظورش این نیست که میتونید DECLARE رو نیارید.
اگر هم منظورتون اینه که به جای این دو خط:
DECLARE @find VARCHAR(30)
SET @find = 'Man%'


خط اول رو حذف کنید و فقط خط دوم رو بنویسید:
SET @find = 'Man%'

خیر،با خطا مواجه خواهید شد.

Must declare the scalar variable "@find".
اگه منظورتون رو اشتباه متوجه شدم بگید.

website.expert
جمعه 25 اسفند 1391, 15:29 عصر
OK،
فکر کنم الان منظورتون رو متوجه شدم:
تو اولی مقدار رو تو یه متغیر قرار داده و بعد از متغیر استفاده کرده،
ولی تو دومی مقدار رو مستقیماً تو عبارت WHERE آورده.
مزیت کوئری اول در اینه که به متغیر مقدار اولیه 'Man%' رو داده که هنگام فراخوانی میشه مقدار متفاوتی را نیز برای جستجو به کوئری ارسال کرد،
و یه حالت پویا داره ولی دومی این قابلیت رو نداره و ایستاست.

irpersian20
شنبه 26 اسفند 1391, 10:28 صبح
سلام
تشکر از شما
آیا الزامی هست همیشه باید بعد از اعلان متغیر نوع مشخص گردد؟ و حتما با SET یک مقدار بهش نسبت داد؟
منظور از پویا بودن این هست که مقدار رو از طریق رابط مثل زبان های برنامه نویسی بهش پاس داد؟
مثل
DECLARE @find VARCHAR(30)
SET @find = 'Man%'

website.expert
شنبه 26 اسفند 1391, 10:53 صبح
سلام
تشکر از شما
آیا الزامی هست همیشه باید بعد از اعلان متغیر نوع مشخص گردد؟ و حتما با SET یک مقدار بهش نسبت داد؟
خواهش میکنم،
بله حتماً نوع باید مشخص شود ولی میتوان مقدار نداد.

منظور از پویا بودن این هست که مقدار رو از طریق رابط مثل زبان های برنامه نویسی بهش پاس داد؟
مثل
DECLARE @find VARCHAR(30)
SET @find = 'Man%'
بله.