N'@ date指的是什么?

时间:2016-09-21 08:07:00

标签: sql sql-server

有人可以帮助我确定以下执行声明中两个设定措施之间N'@date所指的内容吗?

declare @sql nvarchar(4000), @dt datetime;

set @dt = '2015-10-01';

set @sql = N'select * from dim_person

where person_sid
in
(
select max(person_sid)  from dim_person

where [Effective_To] <= @date

group by person_id_number
)';

exec sp_executesql @sql, N'@date datetime',@dt;

3 个答案:

答案 0 :(得分:2)

不只是N&#39; @date,它是N&#39; @date datetime&#39;它将@date变量声明参数作为nvarchar值传递给sp_executesql。

PS:除了它在那里做的事情之外,那些SQL语句通常是无用的并且容易出错。通常你甚至不想为此使用sp_executesql。如果你必须使用像这样的日期时间字符串容易出错。至少它应该是&#39; 20151001&#39;。虚线格式在所有版本和语言设置下都不起作用。

答案 1 :(得分:2)

sp_executesql期望输入参数为unicode字符串。因此,您必须传入NVARCHAR(x) - 字符串

SELECT 'hello'  --creates the string "hello" as VARCHAR

SELECT N'hello' --create the string "hello" as unicode string (NVARCHAR)

在你的行

exec sp_executesql @sql, N'@date datetime',@dt;

... N'@date datetime'是一个输入参数。

您可以在此处详细了解sp_executesql

答案 2 :(得分:2)

根据MSDN - sp_executesql (Transact-SQL)sp_executesql的语法是:

sp_executesql [ @stmt = ] statement  
[   
  { , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }   
     { , [ @param1 = ] 'value1' [ ,...n ] }  
]

在你的情况下,

  1. @sql引用您的SQL语句
  2. N'@date datetime'引用第一个参数名称及其数据类型datetime
  3. @dt是第一个参数的值