【问题标题】:syntax issue with sp_executesqlsp_executesql 的语法问题
【发布时间】:2018-01-03 19:16:29
【问题描述】:

我正在尝试编写一个存储过程,但我一直收到这个我没有定义 @address 的错误,我确实这样做了。我知道我错过了一个小东西,我应该如何改变它?

CREATE PROCEDURE search_domaintable
@link nvarchar(50),
@address nvarchar(50)
AS
EXEC ('SELECT rank , ip FROM dbo.['+@link+'] where [address]=@address ');

我也试过这个:

CREATE PROCEDURE search_domaintable
@link nvarchar(50),
@address nvarchar(50)
AS
EXEC ('SELECT rank , ip FROM dbo.['+@link+'] where [address]=['+@address+']');

但它将@address 值作为列名并告诉我这样的列不存在。

【问题讨论】:

  • 好吧....你实际上并没有使用sp_executesql
  • 在第一个中,没有设置@address 变量的值。其次,尝试打印出生成的字符串,看看它是否执行......它不会因为你没有字符串分隔符......请仔细阅读这篇文章。 sommarskog.se/dynamic_sql.html
  • 很高兴我能帮上忙

标签: sql-server sp-executesql


【解决方案1】:

存储过程应该是这样的:

CREATE PROCEDURE search_domaintable
@link nvarchar(50),
@address nvarchar(50)
AS
EXEC ('SELECT rank , ip FROM dbo.['+@link+'] where address  = ''' + @address + '''');

【讨论】:

  • 严格来说,@link 的类型应该是sysname
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2010-11-20
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多