PDA

View Full Version : ایجاد چند procedure در یک SqlCommand



mehrdad_t
سه شنبه 04 مهر 1385, 10:58 صبح
من در ساخت چندین stored procedure , در یک CommandText با خطا رو به رو میشم .

درظمن , وقتی کدهای ساخت مثلآ جداول رو میدم , خطا های مسخره ای میده . که همون کد ها توی Query اجرا میشن !

یک نمونش :


Command.CommandText = @"USE [shop]
CREATE TABLE [dbo].[Category](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](40) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[Category_Id] [int] NULL,
CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED
([Id] ASC)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]

USE [shoppingdb]
ALTER TABLE [dbo].[Category] WITH NOCHECK ADD CONSTRAINT [FK_Category_Category] FOREIGN KEY([Category_Id])

REFERENCES [dbo].[Category] ([Id])

ALTER TABLE [dbo].[Category] CHECK CONSTRAINT [FK_Category_Category]";

در زمان اجرا Exception به وجود میاد که:

Line 7: Incorrect syntax near '('.

در صورتی که Ouery اجراش میکنه :اشتباه: !!!

h_baqery
سه شنبه 04 مهر 1385, 14:45 عصر
کد زیر مثال خود BOL است و در محیط Query همون پیغام رو می دهد .

ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/tsqlref9/html/1e068443-b9ea-486a-804f-ce7b6e048e8b.htm


CREATE TABLE [dbo].[PurchaseOrderDetail]
(
[PurchaseOrderID] [int] NOT NULL
REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
[LineNumber] [smallint] NOT NULL,
[ProductID] [int] NULL
REFERENCES Production.Product(ProductID),
[UnitPrice] [money] NULL,
[OrderQty] [smallint] NULL,
[ReceivedQty] [float] NULL,
[RejectedQty] [float] NULL,
[DueDate] [datetime] NULL,
[rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL
CONSTRAINT [DF_PurchaseOrderDetail_rowguid] DEFAULT (newid()),
[ModifiedDate] [datetime] NOT NULL
CONSTRAINT [DF_PurchaseOrderDetail_ModifiedDate] DEFAULT (getdate()),
[LineTotal] AS (([UnitPrice]*[OrderQty])),
[StockedQty] AS (([ReceivedQty]-[RejectedQty])),
CONSTRAINT [PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber]
PRIMARY KEY CLUSTERED ([PurchaseOrderID], [LineNumber])
WITH (IGNORE_DUP_KEY = OFF)
)
ON [PRIMARY]

mehrdad_t
سه شنبه 04 مهر 1385, 16:25 عصر
حالا من چه کار باید انجام بدم ؟:ناراحت:

h_baqery
چهارشنبه 05 مهر 1385, 08:17 صبح
کسی از اساتید این تاپیک رو ندیده .

آقا مهرداد من پیشنهاد می دهم که قسمت
WITH (IGNORE_DUP_KEY = OFF) رو
برداری و با دستور جداگانه ای که مربوط به ساخت یا تغییر ایندکسه اونو تغییر بدی چون این گزینه بیشتر برای دستور ساخت ایندکسه .

AminSobati
جمعه 07 مهر 1385, 14:09 عصر
دوست عزیزم این Syntax مربوط به SQL Server 2005 میشه. شما اگر معنی IGNORE_DUP_KEY رو بدونین متوجه میشید که در Primary Key اصلا نمیشه از اون استفاده کرد، به همین دلیل هم در SQL Server 2005 در این شرایط فقط میتونین اون رو OFF بدین. در یک کلام: بهش نیاز ندارید، حذفش کنید!

mehrdad_t
جمعه 07 مهر 1385, 14:24 عصر
خیلی ممنون از پاسختون