Sql server 如何将sql变量传递给类似sql Server 2012的条件

Sql server 如何将sql变量传递给类似sql Server 2012的条件,sql-server,tsql,variables,Sql Server,Tsql,Variables,我正在创建动态sql查询并将变量传递给like语句 这是我的密码 DECLARE @DBname1 VARCHAR(200),@query VARCHAR(200),@tname VARCHAR(200); SET @DBname1='core' SET @tname = 'abc' SET @tname ='''+ '%' + @tname +'''+ '%' PRINT @tname SET @query= 'Select * FROM '+@DBname1+ '.infor

我正在创建动态sql查询并将变量传递给like语句 这是我的密码

 DECLARE @DBname1 VARCHAR(200),@query VARCHAR(200),@tname VARCHAR(200);
  SET @DBname1='core'
  SET @tname = 'abc'
 SET @tname ='''+ '%' + @tname +'''+ '%'
 PRINT @tname 
SET @query= 'Select * FROM '+@DBname1+ '.information_schema.tables where TABLE_NAME like '+ @tname 
PRINT @DBname1
PRINT @query
EXEC (@query)
问题是我无法将单引号传递给类似的变量,上面的代码显示错误消息

在模运算符中,数据类型varchar和varchar不兼容

如果我将代码更改为

SET @tname ='%' + @tname + '%'
然后从变量中删除单引号,并成为
表\u名称,如%test%
,由于缺少单引号,因此不会执行


因此,我想知道如何在将sql变量传递到类似条件之前向其添加单引号,或者如何将其连接起来。

您应该这样做

DECLARE @DBname1 VARCHAR(200),@query VARCHAR(200),@tname VARCHAR(200);
SET @DBname1='core'
SET @tname = 'abc'
PRINT @tname 
SET @query= 'Select * FROM '+@DBname1+ '.information_schema.tables where TABLE_NAME like ''%'+ @tname + '%'''
PRINT @DBname1
PRINT @query
EXEC (@query)

您也可以像这样使用
CONCAT

SET @query= CONCAT('Select * FROM ', 
               @DBname1, 
               '.information_schema.tables where TABLE_NAME like ', 
               '''%', @tname, '%''')

谢谢,它对我有用,我正在搜索过去两天的这个。。再次感谢。很高兴:)