PDA

View Full Version : حرفه ای: مشکل در T_SQL



araz_pashazadeh
یک شنبه 23 اسفند 1388, 12:43 عصر
با عرض سلام وخسته نباشید خدمت دوستان عزیز.
من کدی رو در T_SQL نوشتم ولی با خطا مواجه شدم می خواستم دوستان در مورد خطای این تیکه کد من را راهنمایی کنن؟


WITH SimpleE AS
(
SELECT TB_Percentkar.TypeO,
ROW_NUMBER() OVER(ORDER BY TB_Percentkar.Id_Bar) AS 'RowNumber'
FROM TB_Percentkar
)
SELECT * FROM SimpleE WHERE RowNumber BETWEEN 1 AND 1 ;

و این هم خطای که در SQL میده


Msg 336, Level 15, State 1, Line 17
Incorrect syntax near 'SimpleE'. If this is intended to be a common table expression, you need to explicitly terminate the previous statement with a semi-colon.

لطفا من رو از راهنمایی خوبتون بهره مند کنید:بوس:

محمد سلیم آبادی
یک شنبه 23 اسفند 1388, 13:00 عصر
سلام،
CTE ها با کلمه ی رزرو شده ی WITH معرفی و تعریف می شوند. از طرفی این کلید واژه کاربرد های دیگری هم در SQL Server داره و برای اینکه به نرم افزار اطلاع دهیم از WITH برای تعریف CTE داریم استفاده می کنیم بایستی کاراکتر ; را قبل از WITH قرار بدین

FastCode
یک شنبه 23 اسفند 1388, 13:01 عصر
WITH SimpleE AS
(
SELECT TB_Percentkar.TypeO,
ROW_NUMBER()OVER(ORDERBY TB_Percentkar.Id_Bar)AS'RowNumber'
FROM TB_Percentkar
)
SELECT*FROM SimpleE WHERE RowNumber BETWEEN 1 AND 1 ;

-->

WITH SimpleE AS
(
SELECT TB_Percentkar.TypeO,
ROW_NUMBER()OVER(ORDERBY TB_Percentkar.Id_Bar)AS'RowNumber'
FROM TB_Percentkar
);
SELECT*FROM SimpleE WHERE RowNumber BETWEEN 1 AND 1 ;

محمد سلیم آبادی
یک شنبه 23 اسفند 1388, 13:23 عصر
WITH SimpleE AS
(
SELECT TB_Percentkar.TypeO,
ROW_NUMBER()OVER(ORDERBY TB_Percentkar.Id_Bar)AS'RowNumber'
FROM TB_Percentkar
)
SELECT*FROM SimpleE WHERE RowNumber BETWEEN 1 AND 1 ;

-->

WITH SimpleE AS
(
SELECT TB_Percentkar.TypeO,
ROW_NUMBER()OVER(ORDERBY TB_Percentkar.Id_Bar)AS'RowNumber'
FROM TB_Percentkar
);
SELECT*FROM SimpleE WHERE RowNumber BETWEEN 1 AND 1 ;

SELECT بایستی بعد از تعریف CTE استفاده بشه یعنی اینها باهم یک عبارت رو تشکیل میدن. در صورتی که شما این دو را با کاراکتر ; از هم تفکیک کردین که نتیجه اش صادر شدن یک پیام error دیگر است.

araz_pashazadeh
سه شنبه 25 اسفند 1388, 11:51 صبح
ممنون از راهنمایی سازنده شما
الان این برنامه هیح خطای نداره و نتیجه ای رو که من میخوام می ده ولی من می خوام اطلاعاتی را که دستور SELECT در داخل حلقه برام برمی گرداند را در یک متغییر SET کنم ولی با خطا مواجه میشوم اینم کد من هستش:


WHILE @Counter<=@NumberRow
BEGIN

WITH SimpleE(SType,STypeO,RowNumber) AS
(
SELECT TB_Percentkar.Type, TB_Percentkar.TypeO,
ROW_NUMBER() OVER(ORDER BY TB_Percentkar.Id_Bar) AS RowNumber
FROM TB_Percentkar
)
SELECT SimpleE.SType FROM SimpleE WHERE RowNumber BETWEEN @Counter AND @Counter;
SET @Counter+=1;

می خوام قسمت SELECT بصورت زیر باشه که خطا میده.


SET @Temp=(SELECT SimpleE.SType FROM SimpleE WHERE RowNumber BETWEEN @Counter AND @Counter);

خطا:


Msg 156, Level 15, State 1, Line 27
Incorrect syntax near the keyword 'SET'.

محمد سلیم آبادی
سه شنبه 25 اسفند 1388, 12:35 عصر
اول از همه کد اولی که قرار دادین END نداره.
درباره ی دستور SET میتونین از SELECT به این شکل کار کنین



SELECT @Temp = SimpleE.SType
FROM SimpleE
WHERE RowNumber BETWEEN @Counter AND @Counter;