복붙노트

[SQL] T-SQL : 어떻게 동적 SQL에서 매개 변수를 사용하는 방법?

SQL

T-SQL : 어떻게 동적 SQL에서 매개 변수를 사용하는 방법?

나는 고유 식별자를 기대하고있다 WHERE 절없이 잘 작동되는 다음과 같은 동적 쿼리가 있습니다.

내가 그것을에서 통과하면, 나는 결과를 얻을 수 없습니다. 나는 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

해결법

  1. ==============================

    1.당신은 sp_executesql에 대한 매개 변수를 전달해야합니다. 자세한 내용은 MSDN을 참조하십시오.

    당신은 sp_executesql에 대한 매개 변수를 전달해야합니다. 자세한 내용은 MSDN을 참조하십시오.

    ...
     WHERE 
        CreatedBy = @p
    ...
    
    EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
    
  2. ==============================

    2.여러 매개 변수 구문. 어쩌면이 사람에게 여분의 구글 검색을 저장합니다 :

    여러 매개 변수 구문. 어쩌면이 사람에게 여분의 구글 검색을 저장합니다 :

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

    3.

    DECLARE @ParmDefinition NVARCHAR(500)
    SET @ParmDefinition = '@p_CreatedBy UNIQUEIDENTIFIER'
    
    EXEC sp_executesql @sql, @ParmDefinition, @p_CreatedBy = @p_CreatedBy
    
  4. ==============================

    4.당신의 변수가 문자열 형식 또는 바이너리 채워지고 있는지 확실하지 않습니다,하지만 당신은 당신의 where 절에있는 고유 식별자를 인용해야 할 수도 있습니다. 그냥 고유 식별자 필드를 선택하면 다시 문자열이나 이진 오는가?

    당신의 변수가 문자열 형식 또는 바이너리 채워지고 있는지 확실하지 않습니다,하지만 당신은 당신의 where 절에있는 고유 식별자를 인용해야 할 수도 있습니다. 그냥 고유 식별자 필드를 선택하면 다시 문자열이나 이진 오는가?

  5. from https://stackoverflow.com/questions/1036745/t-sql-how-to-use-parameters-in-dynamic-sql by cc-by-sa and MIT license