2013-10-23 96 views
-2

我想用下面的代码获取从表companies结果来提取表数据。如何设置可变@strs的价值指向我的表companies的列name如何使用SQL Server Management Studio中

declare @strs nvarchar(max) 
set @strs = 'I want to pass table data here' // I want to pass table data here 
set @strs = reverse(@strs) 
select reverse(@strs) String, 
reverse(right(@strs,len(@strs) - charindex(' ',@strs,30))) Description1, 
ltrim(reverse(left(@strs,charindex(' ',@strs,30)))) Description2 
+0

你会详细说明什么叫表中的数据是什么意思? – Miller

+0

通过表数据我的意思是一个表中的字段的值。 – user2906622

回答

0

认为这是你的意思......

select @strs = name from companies where ... 
0

除非我完全脱落...你正在寻找一个变量输入到“动态”选择列的基础。如果这是真的,那么您正在寻找动态SQL。这可能是一个安全漏洞,所以最好是读一下动态SQL需要的内容。比较简单的,你正在建设一个变量的SQL语句,然后执行变量(这是危险的,因为我可以建立一个变量作为SQL代码并执行对您的服务器的SQL注入攻击)。

set @sql = 'select ' + @strs + 'from table' 
exec @sql 

只要@strs是用逗号分隔它们的列的列表,这应该工作。

我要问为什么这样做在这个级别这个虽然...列选择往往是最好的,你是呈现结果给您的用户在......你可能希望做GUI重新考虑为什么你决定这是涅ary。

+0

其实我必须将table1中的数据复制到table2。表1的字段“公司名称”是nvarchar(120)。但是table2有3个字段,每个字段是nvarchar(40)“companyname1”,“companyname2”,“companyname3”。我需要以3个部分将字符串拆分,但以逻辑的方式,在第40个位置的空间的基础上进行拆分。 例如,如果一个字符串是“Alufinish GESELLSCHAFT献给VERFAHRENSTECHNIKü。楚MetalloberflächenbehandlungmbH的&C” 应该在第40的位置 “Alufinish GESELLSCHAFT献给”“VERFAHRENSTECHNIKü。楚”“MetalloberflächenbehandlungmbH的分裂这样的空间的基础上, &C” – user2906622

+0

你的问题,使相当多的感觉现在...你应该使用此信息编辑你的问题,这真的很难从你的问题告诉,这是你的要求。对于一个决议......空间总是在第40和第80个字符,还是你需要检测空间?你可以使用子字符串和左/右逻辑将它们分成40个字符(left(field,40))会给出前40个字符。难的部分是要检测这个空间 – Twelfth

相关问题