نمایش نتایج 1 تا 6 از 6

نام تاپیک: مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

  1. #1
    کاربر دائمی آواتار Touska
    تاریخ عضویت
    مرداد 1383
    محل زندگی
    ایران زمین
    سن
    39
    پست
    1,988

    مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

    من در یک SQl SERVER 2008 یک SP دارم به صورت زیر :

    BEGIN
    SET NOCOUNT ON

    DECLARE @New_Code BIGINT
    SET @New_Code = ( SELECT [MMT].[dbo].[Return_Inquiry_NewCode](@Univer_ID,
    @Center_Code)
    )


    -- Do Some Things like insert with @New_Code

    SET NOCOUNT OFF

    SELECT @New_Code
    END


    حالا اینو از یک SQL 2000 به این شکل صدا می زنم :

    SELECT A.* FROM OPENROWSET('SQLOLEDB','192.168.100.100';'sa';'pass ','SET FMTONLY OFF; EXECUTE [MMT].[dbo].[Register_SP] پارامتر ها ')AS A


    حالا همانطور که می بینید ، در انتهای SP یک مقدار Select شده که مقدار 1000 است ، از Max +1 یک جدول

    بدست اومده ، حالا مشکل زمانی است وقتی SP روی سرور 2008 اجرا می کنیم مقدار 1000 بر می گرداند

    ولی وقتی از طریق OPENROWSET از SQL 2000 اجرا می کنم ، مقدار 1001 را بر میگرداند ، در صورتیکه در

    دیتابیس سرور مقدار 1000 هم Insert شده است.

  2. #2

    نقل قول: مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

    سلام.
    یک سوال.چرا نوع متغیر رو Bigint گرفتید.اگر عددتون کوچک هست از نوع int استفاده کنید.
    بعد خروجی تابع از چه نوعی هست؟

  3. #3
    کاربر دائمی آواتار Touska
    تاریخ عضویت
    مرداد 1383
    محل زندگی
    ایران زمین
    سن
    39
    پست
    1,988

    نقل قول: مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

    با سلام نوع BIGINT به این دلیل که این عدد که ایجاد میشه از مرز INT رد میشه.

    خروجی تابع هم از نوع BIGINT هست.

    جالبش اینجاست که دوبار اجرا نمیشه ، اگر اینطور بود دستورات Insert دوبار اضافه می کرد ، که اینطور نیست.

  4. #4

    نقل قول: مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

    سلام.
    اگر براتون مقدوره کد خود Sp رو قرار بدید.چون کار شما مشکل خاصی نداره.در ضمن شما می فرمائید مقدار 1000 در دیتابیس اضافه شده و این sp مقدار max+1 رو برمیگردونه. پس نباید مقدار 1001 رو برگردونه؟
    مگر مقدار max شما در دیتابیس 1000 نیست؟

  5. #5
    کاربر دائمی آواتار Touska
    تاریخ عضویت
    مرداد 1383
    محل زندگی
    ایران زمین
    سن
    39
    پست
    1,988

    نقل قول: مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

    با سلام این کد SP مربوطه :


    CREATE PROCEDURE [dbo].[Register_MMT_Server]
    (
    @Register_Typ TINYINT , -- 0 -> University 1 -> Center & Hospital
    @Univer_ID TINYINT ,
    @Center_Code SMALLINT ,
    @Name NCHAR(25) ,
    @Last_Name NCHAR(45) ,
    @Father_Name NCHAR(25) ,
    @Sh_Sh NCHAR(12) ,
    @Birth_Date NCHAR(4) ,
    @Orginal_Name NCHAR(255) ,
    @Orginal_Famil NCHAR(255) ,
    @Orginal_Father NCHAR(255) ,
    @National_Id NCHAR(12) ,
    @Date_Post NCHAR(10)
    )
    AS
    BEGIN
    DECLARE @New_Code BIGINT
    SET @New_Code = ( SELECT [MMT].[dbo].[Return_Inquiry_NewCode](@Univer_ID,
    @Center_Code)
    )

    SET NOCOUNT ON


    IF ( @New_Code IS NULL )
    OR ( @New_Code <= 0 )
    BEGIN
    SELECT 0
    RETURN 0
    END

    IF ( @New_Code IS NOT NULL )
    AND ( @New_Code > 0 )
    BEGIN
    IF NOT EXISTS ( SELECT TOP 1
    Sicker_Code
    FROM dbo.MMT_Person
    WHERE Sicker_Code = @New_Code )
    BEGIN
    INSERT INTO dbo.MMT_Person
    ( Univer_ID ,
    Center_Code ,
    Sicker_Code ,
    National_Code ,
    Name ,
    Last_Name ,
    Father_Name ,
    Sh_Sh ,
    Birth_Date ,
    Orginal_Name ,
    Orginal_Famil ,
    Orginal_Father ,
    Date_Post
    )
    VALUES ( @Univer_ID ,
    @Center_Code ,
    @New_Code ,
    @National_Id ,
    @Name ,
    @Last_Name ,
    @Father_Name ,
    @Sh_Sh ,
    @Birth_Date ,
    @Orginal_Name ,
    @Orginal_Famil ,
    @Orginal_Name ,
    @Date_Post
    )
    DECLARE @IDen BIGINT
    Select @IDen = @@IDENTITY

    END
    ELSE
    BEGIN
    SELECT 0
    RETURN 0
    END
    END

    SET NOCOUNT OFF
    Select @New_Code
    END


    این کد Func مربوط به Max جدول 1000 :




    CREATE FUNCTION [dbo].[Return_Inquiry_NewCode]
    (
    @Univer_Id TINYINT ,
    @Center_Code SMALLINT
    )
    RETURNS BIGINT
    AS
    BEGIN
    DECLARE @NewID BIGINT
    DECLARE @Mx BIGINT

    SELECT @Mx = MAX(Sicker_Code)
    FROM MMT.dbo.MMT_Person
    WHERE Univer_ID = @Univer_Id
    AND Center_Code = @Center_Code

    IF @Mx IS NULL
    SET @NewID = 100000
    ELSE
    SET @NewID = (@Mx + 1)

    RETURN @NewID
    END

  6. #6

    نقل قول: مشکل در خروجی اجرای یک Sp از طریق OPENROWSET

    سلام
    پیشنهاد میکنم یک بار توسط Openrowset ابتدا تابع رو صدا بزنید و یک تغییر کوچک در تابع در این قسمت بدهید.

    IF @Mx IS NULL
    SET @NewID = 100000
    ELSE
    SET @NewID = (@Mx + 1)


    به جای استفاده از دستور set از raiseError استفاده کنید یا print ببینید ایا با مقادیر یکسان در هردو Sql شما نتیجه یکسان میگیرید یاخیر.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •