sql - 如何从下面的sql表中获取数据?
问题描述
我的表结构是
Value 0 1 2
X c a d
Y d b e
Z e c f
我的 sql 查询是
Declare @CharValue Char(1)='c';
Declare @CharIndex int=0;
Select [Column] from Data_Masking where '['+Cast(@CharIndex as varchar(5))+']'= 'c'
我需要从上面的查询中输出为“X”,但它的返回为空。
解决方案
您不能用变量替换必须是文字的列名。您可以使用动态 SQL 来做到这一点,但除非您真的知道如何使用它,否则我不建议您走这条路。
考虑到您的表格的简单性,我建议使用“几个”OR
子句:
SELECT [Value]
FROM dbo.YourTable
WHERE (@@CharIndex = 0 AND [0] = @CharValue)
OR (@@CharIndex = 1 AND [1] = @CharValue)
OR (@@CharIndex = 2 AND [2] = @CharValue)
OPTION (RECOMPILE);
我真的,同样,推荐更好的名字0
,1
和2
。不要使用需要定界标识的对象名称。
如果您“必须”使用动态 SQL 执行此操作,则需要执行以下操作。但是请注意,使用动态 SQL 需要考虑很多因素。如果您不了解动态 SQL 的安全含义,则不应使用它。事实上,我建议你应该改变你的设计:
DECLARE @CharValue char(1) = 'c',
@CharIndex sysname = N'0';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT [Value] AS [ColumnValue] FROM dbo.YourTable WHERE ' + QUOTENAME(@CharIndex) + N' = @CharValue;';
--PRINT @SQL;
EXEC sys.sp_executesql @SQL, N'@CharValue char(1)', @CharValue;
推荐阅读
- python - 404 错误 API 调用 Pexels Python
- r - R:根据某些条件对变量求和
- sql - 选择 row_number 大于 1 的行
- linux - 递归地从目录中的文件中删除 '\r' 字符
- python - 如何修复 SublimeText 3 Python 构建错误?
- python - 使用另一个提取一个 numpy 数组的更快方法
- javascript - 键未使用 javascript 在 JSON 数组中排序
- c - 将十六进制值转换为十进制值
- python - 带循环的骰子程序
- python-3.x - .most_similar() 的 Gensim 错误,jupyter 内核重新启动