T-SQL: كيفية استخدام المعلمات في SQL الديناميكي؟
-
10-07-2019 - |
سؤال
ولدي الاستعلام الديناميكي التالية التي يسير على ما يرام دون شرط 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، وأنها لا أعود كسلسلة أو ثنائي؟
لا تنتمي إلى StackOverflow