سؤال

ولدي الاستعلام الديناميكي التالية التي يسير على ما يرام دون شرط WHERE، التي تتوقع UNIQUEIDENTIFIER.

عند أمرر في ذلك، أنا لا أحصل على نتيجة. حاولت CAST وCONVERT، ولكن لا نتيجة. قد أكون أفعل ذلك الخطأ، أي شخص يمكن أن تساعد؟

CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */
(
@p_CreatedBy UNIQUEIDENTIFIER
)
AS
DECLARE @sql NVARCHAR(4000)
SET @sql ='

DECLARE @p_CreatedBY UNIQUEIDENTIFIER

SELECT 
  DateTime,
  Subject,
  CreatedBy
FROM
(
  SELECT 
    DateTime, Subject, CreatedBy, 
    ROW_NUMBER() OVER(ORDER BY DateTime ) AS Indexing
  FROM
    ComposeMail
  WHERE 
    CreatedBy = @p_CreatedBy /* <--- the problem is in this condition */
) AS NewDataTable
'

EXEC sp_executesql @sql
هل كانت مفيدة؟

المحلول

ويجب أن يمر في المعلمات إلى المخزن sp_executesql. انظر MSDN للحصول على التفاصيل .

...
 WHERE 
    CreatedBy = @p
...

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY

نصائح أخرى

DECLARE @ParmDefinition NVARCHAR(500)
SET @ParmDefinition = '@p_CreatedBy UNIQUEIDENTIFIER'

EXEC sp_executesql @sql, @ParmDefinition, @p_CreatedBy = @p_CreatedBy

وتركيب المعلمة متعددة. ربما هذا سيوفر شخص ما البحث جوجل اضافية:

exec sp_executesql 
    @qry, 
    N'@value1 int, @value2 int, @currentValue int', 
    @value1 = @value1, @value2 = @value2, @currentValue = @currentValue

وأنا لست متأكدا مما اذا كان هو الحصول على السكان متغير الخاص بك في شكل سلسلة أو ثنائي، ولكن قد تحتاج إلى تعبير uniqueidentifier في البند حيث الخاص بك. إذا كنت مجرد تحديد الحقل uniqueidentifier، وأنها لا أعود كسلسلة أو ثنائي؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top