View Full Version : استفاده از خروجی دستور select در خود sp
ایمان اختیاری
یک شنبه 06 تیر 1389, 10:03 صبح
سلام
چطور می شه از خروجی دستور select توی همون stored procedure استفاده کرد ؟
کد زیر رو نوشتم ولی مشکل داره بازم ..
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
declare @p1 int
ALTER PROCEDURE [dbo].[test]
AS
BEGIN
select pcnum
into @p1
from dbo.temp.setting;
END
Rejnev
یک شنبه 06 تیر 1389, 10:11 صبح
set @p=(select top 1 field from tbl)
اگه مقدارت یک جدول و یا چندتا رکورد باشه باید اونا رو توی یک جدول موقت اینسرت کنی و بعد استفاده کنی
در ضمن یک شرط هم باید بزاری تا محدود بشه و چند تا برنگردونه تا خطا نده
ایمان اختیاری
یک شنبه 06 تیر 1389, 15:28 عصر
بابت راهنمایی متشکر
من کد زیر رو نوشتم ولی از همون متغییری که قراره خروجی select توش ریخته بشه اشکال می گیره .. مشکلم کجاست ؟
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[test2]
@p1 nvarchar(50),
@p2 int,
@p3 nvarchar(50)
AS
BEGIN
set @p1=(SELECT [pcnum] FROM [temp].[dbo].[setting])
set @p2=1
set @p3='offline'
DELETE FROM [temp].[dbo].[pcs]
while @p2 <= @p1
begin
INSERT INTO [temp].[dbo].[pcs]
([id],[state])
VALUES
(@p2,@p3);
set @p2=@p2+1
end
END
behrouzlo
یک شنبه 06 تیر 1389, 18:17 عصر
دستوري كه شما نوشتيد فكر كنم كلا مشكل داره شكل صحيح آن به صورت زير هست:
SELECT [pcnum] INTO TempTbl FROM [temp].[dbo].[setting]
ثانيا فكر كنم بايد به جاي While هم از دستور CURSOR استفاده كنيد البته اگر دقيقا كاري را كه مي خواهيد انجام بدهيد مطرح بكنيد شايد راه حل ساده تري هم باشه
Rejnev
دوشنبه 07 تیر 1389, 12:35 عصر
set @p1=(SELECT [pcnum] FROM [temp].[dbo].[setting])
while @p2 <= @p1
دستور اول رو که مطمئن بشید select بیش از یک مقدار بر نگردونه.
اگه pnum از نوع عدده لازم نیست p1 از نوع رشته باشه.
خطای while هم از همینه که شما یک رشته رو با یک عدد مقایسه کردین.
اگر هم pnum رشته ای هست که باید در دستور while یک cast به عدد انجام بدید
while @p2 <= cast(@p1 as int)
ایمان اختیاری
دوشنبه 07 تیر 1389, 12:50 عصر
دستتون درد نکنه بابت راهنمایی
فهمیدم اشکال کار از کجا بوده .. متغییرها رو باید بعد از begin تعریف می کردم :
alter PROCEDURE test2
AS
BEGIN
declare
@p1 nvarchar(50),
@p2 int,
@p3 nvarchar(50)
set @p1=(SELECT [pcnum] FROM [temp].[dbo].[setting])
set @p2=1
set @p3='offline'
DELETE FROM [temp].[dbo].[pcs]
while @p2 <= @p1
begin
INSERT INTO [temp].[dbo].[pcs]
([id],[state])
VALUES
(@p2,@p3);
set @p2=@p2+1
end
END
GO
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.