有人可以帮助我确定以下执行声明中两个设定措施之间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;
答案 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 ] }
]
在你的情况下,
@sql
引用您的SQL语句N'@date datetime'
引用第一个参数名称及其数据类型datetime
@dt
是第一个参数的值