Sql server sp_executesql;Msg 102,级别15附近语法不正确

Sql server sp_executesql;Msg 102,级别15附近语法不正确,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我已经找了一段时间了,但仍然找不到答案。 我试图使用一个非常简单的存储过程sp_executesql来创建一个数据库或表 exec sp_executesql N'create database @d', N'@d nvarchar(1)', @d = 'a'; 还是这个 exec sp_executesql N'create table @d', N'@d nvarchar(9)', @d=N'MyTable' 继续获

我已经找了一段时间了,但仍然找不到答案。 我试图使用一个非常简单的存储过程sp_executesql来创建一个数据库或表

    exec sp_executesql
     N'create database @d',
     N'@d nvarchar(1)',
     @d = 'a';
还是这个

    exec sp_executesql 
    N'create table @d',
    N'@d nvarchar(9)',
    @d=N'MyTable'
继续获得此消息:

Msg 102,15级,状态1,第1行 “@d”附近的语法不正确


我不明白为什么?

在这种情况下,SQL Server将不接受变量。有关选项,请参见此处:


可能的重复您应该知道,在非动态SQL中作为文本执行时不可能的内容,在通过动态SQL作为文本执行时也不可能。所以你不能只使用变量来引用对象。但是,因为您使用的是动态SQL,所以可以将它们连接到查询中,这样它们就不再是变量了。这就是为什么我没有找到上面的答案,我的问题是学习ado.net的结果。