sql - 如何在动态查询中使用整数变量
问题描述
我创建了以下动态查询来检查特定属性的长度是否超过 50。我试图使长度大小也动态但低于错误。
Msg 207, Level 16, State 1, Line 7
Invalid column name '50'.
我提出的查询如下。我对 SQL 很陌生,并试图解决这个错误。谢谢!
--Rule A.5.Summary :- Length
/* The 'DECLARE' statements below are used to
define standard test parameters and their datatypes. The values for these
parameters will be updated for each of the DQ dimensions/KDEs being tested */
DECLARE @DQ_DIMENSION_RULE VARCHAR(100)
DECLARE @RULE_NO VARCHAR(100)
DECLARE @TABLE_NAME VARCHAR(100)
DECLARE @DATA_ATTRIBUTE VARCHAR(100)
DECLARE @LENGTH_SIZE INT
/*The 'SET' statements below are used to
assign values to each of the test parameters declared above.
The values will depend on the DQ dimension/KDE being tested.*/
SET @DQ_DIMENSION_RULE = 'Accuracy - Negative Values'
SET @RULE_NO = 'A.4'
SET @TABLE_NAME = 'TRANSACTIONS'
SET @DATA_ATTRIBUTE = 'TRANSACTIONID'
SET @LENGTH_SIZE = 50
DECLARE @sql nvarchar(max) = N'
SELECT
' + QUOTENAME(@DQ_DIMENSION_RULE, '''') + N' AS [DQ_Dimension_Rule],
' + QUOTENAME(@RULE_NO, '''') + N' AS [Rule_No],
' + QUOTENAME(@TABLE_NAME, '''') + N' AS [Table Name],
' + QUOTENAME(@DATA_ATTRIBUTE, '''') + N' AS [Column Name],
case when SUM(CASE WHEN LEN(' + QUOTENAME(@DATA_ATTRIBUTE) + N') >' + QUOTENAME(@LENGTH_SIZE) + N' THEN 1 ELSE 0 END) > 0 then ''Y'' else ''N'' end as [Potential Issue(Y/N)]
FROM ' + QUOTENAME(@TABLE_NAME)
-- The data from 'SELECT' statement is being inserted into the summary table
--INSERT INTO summary
EXEC sp_executesql @sql;
解决方案
您不应该放置QUOTENAME()
整数值,整数不是您需要引用的表名等。
你应该只将整数转换为字符串,不带引号......
DECLARE @sql nvarchar(max) = N'
SELECT
' + QUOTENAME(@DQ_DIMENSION_RULE, '''') + N' AS [DQ_Dimension_Rule],
' + QUOTENAME(@RULE_NO, '''') + N' AS [Rule_No],
' + QUOTENAME(@TABLE_NAME, '''') + N' AS [Table Name],
' + QUOTENAME(@DATA_ATTRIBUTE, '''') + N' AS [Column Name],
case when SUM(CASE WHEN LEN(' + QUOTENAME(@DATA_ATTRIBUTE) + N') >' + CAST(@LENGTHSIZE AS NVARCHAR(MAX)) + N' THEN 1 ELSE 0 END) > 0 then ''Y'' else ''N'' end as [Potential Issue(Y/N)]
FROM ' + QUOTENAME(@TABLE_NAME)
QUOTENAME(@LENGTHSIZE)
=>CAST(@LENGTHSIZE AS NVARCHAR(MAX))
推荐阅读
- php - 将base64字符串编码为从mysql接收的swift中的图像
- ios - 单元测试:模拟用户有特定的日历
- java - 为什么intellij打包的WAR文件一般会排除resources目录
- jenkins - 在 Jenkins 中使用 rerunner-jupiter 扩展时,“junit-jupiter”未能发现测试
- sql - Oracle:交易前激活 DBLINK
- excel - Excel - VBA 每月的第一个工作日
- angular - 模态不会在背景点击时关闭
- java - 如何使用 playframework 1.5.0 在 ajax 调用中调用 httprequest
- vba - 将函数的结果写入变量,其中结果可以是对象
- laravel-5 - 是否可以在一个系统 Laravel 上创建多个 swagger 文档页面?