PDA

View Full Version : سوال: فرق ; با GO در یک SP



odiseh
پنج شنبه 05 دی 1387, 11:24 صبح
سلام
فرق بین ; با Go در یک SP چیه؟

حامد مصافی
پنج شنبه 05 دی 1387, 11:44 صبح
کاراکتر ; نشانه پایان یک دستور SQL است. اما دستور GO تمامی دستورات قبل از خود را در قالب یک نسخه به مجری دستورات SQL ارسال می کند.
در واقع دستورات SQL تا رسیدن به یک GO در حکم یک بلاک هستند و برای مثال شما نمی توانید متغیر تعریف شده را، بعد از دستور GO استفاده کنید.
مثال : در کد زیر دستور print موجب تولید یک خطا خواهد شد.

DECLARE @newvar VARCHAR(50)
SELECT @newvar = 'Hello, World.'
GO

PRINT @newvar
GO

تولائی
پنج شنبه 05 دی 1387, 11:52 صبح
فرق ; با Go تو این‌ه که ; پایان دستور رو نشون می‌ده ولی Go پایان batch رو. یعنی وقتی مفسر sql به Go می‌رسه batch رو تموم می‌کنه و کل batch رو به سمت server می‌فرسته. پس اگه متغییری در batch تعریف شده باشه با دستور Go از بین می‌ره ولی با ; میشه کماکان از اون استفاده کرد. این تو یک batch معمولی‌ه. اگه از SP منظورت Stored Procedure خودمونه که با استفاده از Go کل Stored Procedure تموم می‌شه.
به کد زیر نگاه کن.


create proc ___A as
select 1
go
select 2
exec ___A
go
drop proc ___A

AminSobati
جمعه 06 دی 1387, 01:07 صبح
دقت کنید که GO از دستورات TSQL نیست. بعضی از نرم افزارها این عبارت رو درک میکنند. مثلا Query Analyzer یا Management Studio با رسیدن به این عبارت، دستورات قبلی رو به Compiler ارسال میکنند. به همین دلیل متغیرهای تعریف شده در یک بخش، در بخش بعدی شناخته نمیشن. اگر از ADO عبارت GO رو ارسال کنید، چون ADO اون رو درک نمیکنه لذا GO رو هم به SQL Server میفرسته و Error رخ میده.