Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Sp Executesql - Fatal编程技术网

Sql server sp_executesql的语法问题

Sql server sp_executesql的语法问题,sql-server,sp-executesql,Sql Server,Sp Executesql,我正在尝试编写一个存储过程,但我一直遇到这个错误,我没有定义@address,我已经定义了。我知道我错过了一件小事,我该怎么改变呢 CREATE PROCEDURE search_domaintable @link nvarchar(50), @address nvarchar(50) AS EXEC ('SELECT rank , ip FROM dbo.['+@link+'] where [address]=@address '); 我也试过这个: CREATE PROCEDURE sea

我正在尝试编写一个存储过程,但我一直遇到这个错误,我没有定义@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 value作为列名,并告诉我这样的列不存在。

存储过程应该如下所示:

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

嗯……在第一个示例中,您实际上没有使用
sp_executesql
,没有设置@address变量的值。在第二种情况下,试着打印出生成的字符串,看看它是否执行…它不会执行,因为您没有字符串分隔符。。。请仔细阅读这篇文章。很高兴我能帮忙严格地说,
@link
应该是
sysname
类型。