Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
Sql server 将参数传递到sp_executesql_Sql Server_Tsql_Dynamic Sql_Sp Executesql - Fatal编程技术网

Sql server 将参数传递到sp_executesql

Sql server 将参数传递到sp_executesql,sql-server,tsql,dynamic-sql,sp-executesql,Sql Server,Tsql,Dynamic Sql,Sp Executesql,我有以下简单的动态SQL代码: declare @cmd nvarchar(100) declare @paramDef nvarchar(100) = N'@p nvarchar(20)' declare @p nvarchar(10) = N'SubTotal' set @cmd = N'select @p from Sales.SalesOrderHeader' exec sp_executesql @cmd, @paramDef, @p 但是,运行此命令会输出重复单词“SubTotal

我有以下简单的动态SQL代码:

declare @cmd nvarchar(100)
declare @paramDef nvarchar(100) = N'@p nvarchar(20)'
declare @p nvarchar(10) = N'SubTotal'
set @cmd = N'select @p from Sales.SalesOrderHeader'
exec sp_executesql @cmd, @paramDef, @p

但是,运行此命令会输出重复单词“SubTotal”的列,而不是SubTotal列的实际值。我没有正确地传递参数吗?

不能将参数用于表名或列名。您必须修改实际的SQL:

declare @cmd nvarchar(100)
declare @p nvarchar(10) = N'SubTotal'
set @cmd = N'select ' + QUOTENAME(@p) + N' from Sales.SalesOrderHeader'
exec sp_executesql @cmd
在select语句中包含常量值是完全有效的,这与您的尝试类似(仅使用参数而不是文字值)。希望您不会(太)惊讶于这样的查询:

select 'abc' from sys.objects
只需多次返回字符串
abc
,这就是使用参数时发生的情况