Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL:如何在动态SQL中使用参数?_Sql_Sql Server_Tsql_Dynamic Sql - Fatal编程技术网

T-SQL:如何在动态SQL中使用参数?

T-SQL:如何在动态SQL中使用参数?,sql,sql-server,tsql,dynamic-sql,Sql,Sql Server,Tsql,Dynamic Sql,我有下面的动态查询,在没有WHERE子句的情况下运行良好,WHERE子句需要UNIQUEIDENTIFIER 当我通过时,我没有得到结果。我试着转换,但没有结果。我可能做错了,有人能帮忙吗 CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */ ( @p_CreatedBy UNIQUEIDENTIFIER ) AS DECLARE @sql NVARCHAR(4000) SET @sql ='

我有下面的动态查询,在没有WHERE子句的情况下运行良好,WHERE子句需要UNIQUEIDENTIFIER

当我通过时,我没有得到结果。我试着转换,但没有结果。我可能做错了,有人能帮忙吗

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

我不确定您的变量是以字符串格式还是二进制格式填充的,但您可能需要在where子句中引用uniqueidentifier。如果只选择uniqueidentifier字段,它是以字符串形式还是二进制形式返回?

必须将参数传递给sp_executesql

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,但这样做时给出的语法不正确。举个例子,怎么做。等一下。。。您不需要将var名称放在引号之外吗?因此,按照CreatedBy='+@p_CreatedBy+'的思路,我认为这种方法实际上是将文本字符串放入sql中。我尝试了这种方法,但它不起作用,因为给出以下错误过程需要类型为'ntext/nchar/nvarchar'的参数'@parameters'。通过添加一个'N':EXECUTE sp_executesql@sql,N'@p UNIQUEIDENTIFIER'。。。
exec sp_executesql 
    @qry, 
    N'@value1 int, @value2 int, @currentValue int', 
    @value1 = @value1, @value2 = @value2, @currentValue = @currentValue