首页 新闻 会员 周边

sqlserver在单引号中使用变量

0
悬赏园豆:5 [已解决问题] 解决于 2016-04-20 11:18

在单引号中怎么使用变量啊

SELECT  *  FROM OPENQUERY ([192.168.159.134] ,'select prjkey from project where prjname = @prjname' )

这样写报错

SELECT  *  FROM OPENQUERY ([192.168.***.***] ,'select prjkey from project where prjname = ''@prjname''' )

这样写就相当于字符串了
我写+号报语法错误

急救

小光的主页 小光 | 小虾三级 | 园豆:1766
提问于:2016-04-19 17:34
< >
分享
最佳答案
0

豆有点少、不想说(ˇˍˇ) ~

收获园豆:2
Ctrl` | 老鸟四级 |园豆:3317 | 2016-04-19 17:38
其他回答(3)
0

简单点 先字符串拼凑,然后再放进去

@sql='select prjkey from project where prjname'+ @prjname

收获园豆:2
风醉 | 园豆:1197 (小虾三级) | 2016-04-19 17:38
declare @sql varchar(50)
set @sql='select prjkey from project where prjname = '+ @prjname
SELECT  *  FROM OPENQUERY ([192.168.159.134] ,@sql )

报错
@sql附近有语法错误

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2016-04-19 17:41

@博客园乄小光:   来来来、贴个编译通过的

BEGIN
 declare @sql varchar(100)
 if(@city='') set @sql='select DEPT_CODE from T_USERDEPT where USER_NO='+@user+''
 else set @sql='select DEPT_CODE from T_DEPT where BRANCH_CODE='+@city+''

 select * from P_BUSINESS_LIST where DEPT_CODE in (@sql)
END

支持(0) 反对(0) Ctrl` | 园豆:3317 (老鸟四级) | 2016-04-19 17:44

@博客园乄小光:  这个函数有点坑,第二个参数类型貌似限制了一般的字符串拼凑,继续拼凑,测试print出来是正确的,你试下

declare @sql varchar(100)
        ,@prjname varchar(100)

set @prjname='xxxx'

set @sql='SELECT * FROM '+ 'OPENQUERY'+'('+'[192.168.159.134]'+','+'''select prjkey from project where prjname ='+ @prjname+''''+')'  

print @sql    


Result:

SELECT * FROM OPENQUERY([192.168.159.134],'select prjkey from project where prjname =xxxx')

 

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2016-04-19 18:23

@风醉: 但是报列名xxxx无效

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2016-04-20 09:54

@博客园乄小光: 不会吧,我那个表名写错了(是你的表名,我这里面用的是 project),你改下,我exec 这个@sql 是提示服务器不对,这个代表这段语句是对的啊

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2016-04-20 10:09

@风醉: 我的表名就是这个,你服务器对了才会报这个错,我试试用同义词

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2016-04-20 10:18
0

我就奇怪了,你们为什么喜欢最后加个空字符串,难道仅仅就是对称美?

set @sql='select prjkey from project where prjname = '+ @prjname+''   
为什么不写成
set @sql='select prjkey from project where prjname = '+ @prjname
set @sql='SELECT * FROM '+ 'OPENQUERY'+'('+'[192.168.159.134]'+','+'''select prjkey from project where prjname ='+ @prjname+''''+')' 
为什么不写成
set @sql='SELECT * FROM '+ 'OPENQUERY'+'('+'[192.168.159.134]'+','+'select prjkey from project where prjname ='+ @prjname+')' 

 

 

 

无影飞絮剑 | 园豆:1155 (小虾三级) | 2016-04-20 09:07

java是这么写的

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2016-04-20 09:19

SQL 里面 ' ' 里面要 再有个 '   用 ''' ,例如单个执行出来是:

SELECT * FROM OPENQUERY([192.168.159.134],select prjkey from project where prjname =xxxx)

而我们需要得到的是

SELECT * FROM OPENQUERY([192.168.159.134],'select prjkey from project where prjname =xxxx')

支持(0) 反对(0) 风醉 | 园豆:1197 (小虾三级) | 2016-04-20 10:14
0

要回答你这问题,首先看一下这个微软官方链接

OPENQUERY (Transact-SQL)

很明显你这儿的prjname字段是字符型的,你应该参考的是这段代码

DELETE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''');

想想看这段代码和你写的

@sql='select prjkey from project where prjname = '+ @prjname

有啥不同,使劲想,想不出来就去跑步1000米。

收获园豆:1
爱编程的大叔 | 园豆:30839 (高人七级) | 2016-04-20 09:32

外面下雨。。。在openquery方法的sql语句中使用不了变量么,你的那个例子的sql是字符型的,我的变量也是字符型的,我知道那个例子写的是对的,但是我要把那个NewTitle变成变量。。。

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2016-04-20 09:44

@博客园乄小光: 这就是我要你想得啊,

你看看怎样写,假设你那个变量是NewTitle,怎样修改你的SQL语句才能变成示例中的SQL语句,一模一样。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2016-04-20 09:54

@爱编程的大叔: 我试过很多种了,一模一样的时候就把变量当初字符串了。。

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2016-04-20 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册