我有表名作为@Table_Name
如何在不知道列名的情况下获取列值? SQL Server的
我列值@Value
,但没有列名(但存在于第一的位置,并且可以Seek_id或prov_id ......我要比较我的价值与此ID)
我怎样才能比较该表的列名称值?
我想是这样
SELECT * FROM @Table_Name
WHERE Table.Column[1].Value = @Value
例如@Table_Name = bb_match
和@Value = 6
我有表名作为@Table_Name
如何在不知道列名的情况下获取列值? SQL Server的
我列值@Value
,但没有列名(但存在于第一的位置,并且可以Seek_id或prov_id ......我要比较我的价值与此ID)
我怎样才能比较该表的列名称值?
我想是这样
SELECT * FROM @Table_Name
WHERE Table.Column[1].Value = @Value
例如@Table_Name = bb_match
和@Value = 6
这可能是有益的你 -
查询:
IF OBJECT_ID (N'dbo.bb_match') IS NOT NULL
DROP TABLE dbo.bb_match
CREATE TABLE dbo.bb_match (seek_id INT, prov_id INT)
INSERT INTO dbo.bb_match (seek_id, prov_id)
VALUES (6, 1), (2, 6)
DECLARE
@ColumnID TINYINT
, @Value INT
, @TableName SYSNAME
, @SQL NVARCHAR(500)
SELECT
@ColumnID = 1
, @Value = 6
, @TableName = 'dbo.bb_match'
SELECT @SQL = 'SELECT * FROM ' + @TableName + ' WHERE [' + c.name + '] = ' + CAST(@Value AS NVARCHAR(MAX))
FROM sys.objects o WITH (NOWAIT)
JOIN sys.schemas s WITH (NOWAIT) ON o.[schema_id] = s.[schema_id]
JOIN sys.columns c WITH (NOWAIT) ON o.[object_id] = c.[object_id]
WHERE o.[type] = 'U' -- <-- only for tables columns
AND s.name + '.' + o.name = @TableName
AND c.column_id = @ColumnID
PRINT @SQL
EXEC sp_executesql @SQL
短,但不安全(SYS.COLUMNS包含列名的表,视图,存储过程,...):
SELECT @SQL = 'SELECT * FROM ' + @TableName + ' WHERE [' + c.name + '] = ' + CAST(@Value AS NVARCHAR(MAX))
FROM sys.columns c WITH (NOWAIT)
WHERE c.[object_id] = OBJECT_ID(@TableName)
AND c.column_id = @ColumnID
EXEC sys.sp_executesql @SQL
输出:
SELECT * FROM dbo.bb_match WHERE [seek_id] = 6
结果:
seek_id prov_id
----------- -----------
6 1
这不显示记录/结果.... onlu显示列名称 – user2369561 2013-05-10 10:16:18
您在哪里指定了列位置。他想要将该值与第一列进行比较。 – Maximus 2013-05-10 10:16:33
我有表名* table_Name和列值*值不列名称...我如何搜索* table_Name我知道列位置是1st(表中的第一列)..... – user2369561 2013-05-10 10:20:04
declare @sql varchar(MAX)
declare @tablename varchar(100) = 'MyTable' --add your table name here
declare @value varchar(100) = 'SomeValue' -- add your desired value hree
select @sql = 'SELECT * FROM ' + @tablename + ' WHERE '
+ name
+ ' = ''' + @value + ''''
from sys.columns where object_id = object_id(@tablename) and column_id = 1
exec (@sql)
这有三个部分。首先我要宣布三个字符串。 @sql
是我将建立查询的地方,@tablename
和@value
是查找/查找的表和搜索值。我已经输入了虚拟值MyTable和SomeValue来显示我在说什么
接下来我构建了sql语句。第一行设置的字符串作为SELECT * FROM MyTable WHERE
我然后在列名通过从SQL Server系统表sys.columns
选择名称,过滤在所述第一柱(column_id = 1
)和表名添加
下一步是在列中添加我们想要搜索的值。
最后,EXEC(@sql)
将字符串解释为命令并运行它。
谢谢jaloopa ....但出现错误消息137,级别15,状态1,行2 必须声明标量变量“@sql”。 消息137,级别15,状态2,行7 必须声明标量变量“@sql”。 – user2369561 2013-05-10 10:43:30
选择@sql = 'SELECT * FROM' + bb_match + '其中' +命名 + '=' + 8 从SYS.COLUMNS其中的object_id =的object_id( '的TControl')和COLUMN_ID = 1 EXEC(@sql ) – user2369561 2013-05-10 10:43:48
对于我来说这个问题的解决方案非常紧迫 – user2369561 2013-05-10 10:47:23
你不能这样做 - SQL Server需要一个列名 - 它不能使用序号位置来引用表中的一列 – 2013-05-10 10:08:28
你可能可以使用一些动态SQL查询sys.columns来查找第一列 – Jaloopa 2013-05-10 10:09:44
你可以使用INFORMATION_SCHEMA.COLUMNS表中的ordinal_position字段查找给定表的第一列。 – Maximus 2013-05-10 10:18:29