Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
如何在SQLServerManagementStudio中使用从表中提取数据_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

如何在SQLServerManagementStudio中使用从表中提取数据

如何在SQLServerManagementStudio中使用从表中提取数据,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我想使用以下代码从表公司中获取结果。如何将变量@strs的值设置为指向表companys的列name 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) - ch

我想使用以下代码从表
公司
中获取结果。如何将变量
@strs
的值设置为指向表
companys
的列
name

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
我想这就是你的意思

select @strs = name from companies where ...

除非我完全离开了……否则您将根据变量输入“动态”选择列。如果这是真的,那么您正在寻找动态SQL。这可能是一个安全循环漏洞,所以最好是阅读一下动态SQL所包含的内容。相对简单,在变量中构建SQL语句,然后执行变量(这很危险,因为我可以将变量构建为SQL代码,然后对服务器执行SQL注入攻击)

只要@strs是一个列列表,列之间用适当的逗号分隔,就应该可以了


我需要问一下你为什么要这样做……在这个级别上选择列通常最好是在GUI中完成,在GUI中向用户显示结果……你可能需要重新考虑一下为什么你认为这是必要的。

你能详细说明一下表数据是什么意思吗?表数据是指表中字段的值。实际上,我必须将数据从表1复制到表2。表1中的字段“companyname”是nvarchar(120)。但是表2有3个字段,每个字段都是nvarchar(40)“companyname1”、“companyname2”、“companyname3”。我需要将字符串拆分为3段,但以逻辑方式,基于第40个位置的空间。例如,如果字符串为“Alufinish Gesellschaft für Verfahrenstechnik u.zur Metalloberflächenbehandlung mbH&C”,则应根据第40个位置“Alufinish Gesellschaft für”“Verfahrenstechnik u.zur”“Metalloberflächenbehandlung mbH&C”的空间进行拆分你的问题现在变得更有意义了……你应该用这些信息编辑你的问题,从你的问题很难判断这就是你要问的。对于分辨率…是空间总是在第40和第80个字符,还是您也需要检测空间?您可以使用子字符串和左/右逻辑将它们分成40个字符(左(字段,40)将给出前40个字符。最难的部分是检测该空间
set @sql = 'select ' + @strs + 'from table'
exec @sql