动态SQL中,字段名作为变量时,如何赋值

houbinvc 2017-02-22 06:54:18
declare @sql nvarchar(4000)
declare @FieldName nvarchar(256)
declare @TableName nvarchar(256)
declare @aName nvarchar(256)
declare @ID2 int
set @ID2 = 1

SET @TableName = 'Student' //数据库中表名为Student
SET @FieldName = 'Name' //表Student某列列名为Name
set @ID2 = 1 //某列的ID值

SET @sql='SELECT @aName= '+ @FieldName +' FROM '+@TableName+' WHERE ID=@ID2
exec (@sql)


执行后变量@aName值为该单元格的第一个字符,不能取出完整的值,求助,谢谢
...全文
1586 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2017-02-22
  • 打赏
  • 举报
回复 1
按照你的例子你是想取值到一个变量吧,你可以参考下面的,用sp_executesql



USE AdventureWorks2014
GO

DECLARE @sql nvarchar(4000) 
declare @FieldName nvarchar(256)  
declare @TableName nvarchar(256)  
declare @aName nvarchar(256)  
declare @ID2 int
set @ID2 = 1 

SET @TableName = 'Person.Person' --//数据库中表名为Student
SET @FieldName = 'FirstName+ISNULL('' ''+LastName,'''')'  -- //表Student某列列名为Name
set @ID2 = 1  --//某列的ID值

SET @sql='SELECT @aName= '+ @FieldName +' FROM '+@TableName+' WHERE BusinessEntityID='+LTRIM(@ID2)
EXEC sys.sp_executesql @sql,N'@aName nvarchar(256) out',@aName=@aName out
PRINT @aName
输入:Ken Sánchez
二月十六 版主 2017-02-22
  • 打赏
  • 举报
回复
declare @sql nvarchar(4000) 
declare @FieldName nvarchar(256)  
declare @TableName nvarchar(256)  

declare @ID2 int
set @ID2 = 1 

SET @TableName = 'Student' --数据库中表名为Student
SET @FieldName = 'Name'   --表Student某列列名为Name
set @ID2 = 1  --某列的ID值

SET @sql='declare @aName nvarchar(256)   
SELECT @aName= '+ @FieldName +' FROM '+@TableName+' WHERE ID='+RTRIM(@ID2)+'
select @aName'
PRINT (@sql)
houbinvc 2017-02-22
  • 打赏
  • 举报
回复
引用 1 楼 DVD_01 的回复:
try:

declare @sql nvarchar(4000) 
declare @FieldName nvarchar(256)  
declare @TableName nvarchar(256)  
declare @aName nvarchar(256)  
declare @ID2 int
set @ID2 = 1 

SET @TableName = 'Student' --数据库中表名为Student
SET @FieldName = 'Name'   --表Student某列列名为Name
set @ID2 = 1  --某列的ID值

SET @sql='SELECT @aName= '+ @FieldName +' FROM '+@TableName+' WHERE ID='+rtrim(@ID2)
exec (@sql)
不是,谢谢
Andy-W 2017-02-22
  • 打赏
  • 举报
回复
try:

declare @sql nvarchar(4000) 
declare @FieldName nvarchar(256)  
declare @TableName nvarchar(256)  
declare @aName nvarchar(256)  
declare @ID2 int
set @ID2 = 1 

SET @TableName = 'Student' --数据库中表名为Student
SET @FieldName = 'Name'   --表Student某列列名为Name
set @ID2 = 1  --某列的ID值

SET @sql='SELECT @aName= '+ @FieldName +' FROM '+@TableName+' WHERE ID='+rtrim(@ID2)
exec (@sql)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧