sql-server - SQL SERVER sp_executesql ')' 附近的语法不正确

标签 sql-server stored-procedures sp-executesql

当我尝试在 sql server 2014 中执行 sp_ExecuteSql 时遇到这个问题 有我的存储过程:

alter proc search
@Name nvarchar 
as
declare @SQL nvarchar
declare @Params nvarchar
begin
    set @SQL = N' Select * from Table_1 , Table_2 where (1=1) '

    if @Name is not null
        begin
        set @SQL = @SQL + ' and Table_2.thatoneID = ( Select Table_1.Id from Table_1 where Table_1.Name like ''%''+@Name+''%'' ) '
        end
    set @SQL = @SQL + ' and Table_2.thatoneID = Table_1.Id ; '

    set @Params = '@Name nvarchar'

    execute sp_executesql @SQL , @Params , @Name 
end

当我尝试:

Execute search 'hh'

我遇到了这个错误

Msg 102, Level 15, State 1, Line 29 Incorrect syntax near ')'.

最佳答案

您应该始终指定变量的长度,因此 nvarchar(100) 否则它将默认为 1 个字符。

只需通过打印来测试您的变量存储的内容:

print @sql
print @params

没有长度设置,唯一打印的是

@

为什么 @sql 变量只有“@”而不是 SELECT 关键字中的“S”?因为您在 @sql 变量的开头有一个空格。

与为每个变量设置大小时相反(我将使用最大值,因为我不知道您实际需要的长度):

declare @SQL nvarchar(max)
    , @Name nvarchar(max)
declare @Params nvarchar(max)
begin
    set @SQL = N' Select * from Table_1 , Table_2 where (1=1) '

    if @Name is not null
        begin
        set @SQL = @SQL + ' and Table_2.thatoneID = ( Select Table_1.Id from Table_1 where Table_1.Name like ''%''+@Name+''%'' ) '
        end
    set @SQL = @SQL + ' and Table_2.thatoneID = Table_1.Id ; '

    set @Params = '@Name nvarchar'

    print @sql
    print @params

end

这会给你:

 Select * from Table_1 , Table_2 where (1=1)  and Table_2.thatoneID = Table_1.Id ; 
@Name nvarchar

我建议你先试试这个,看看你是否仍然得到这个错误。

关于sql-server - SQL SERVER sp_executesql ')' 附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39117705/

相关文章:

sql-server - sp_executesql 按 "must contain at least one column that is not an outer reference"分组

oracle - 每次 EXECUTE IMMEDIATE 后都需要 COMMIT 吗?

sql-server - SQL Server 直通查询作为 Access 中 DAO 记录集的基础

sql-server - 如何使用代码检索 SQL Server 中表的现有索引?

sql-server - 通过 VPN 与 SQL Server 2008 的 ODBC 连接失败

MySQL:拆分列(带分隔符)并插入新表的存储过程

sql-server - SQL 查询错误 "Incorrect syntax near the keyword ' IS'。”

PostgreSQL 无法在 PL/pgSQL 中开始/结束事务

mysql - 如果条件满足则跳出 IF 语句

sql-server - 为什么在通过 sp_executeSQL 过程执行时,完全相同的 SQL 查询会产生不同的执行计划?