需要有关如何向动态SQL查询中正确添加参数的帮助/说明

时间:2019-06-10 16:44:01

标签: sql-server dynamic-sql

我正在搜索数据库,并与StackOverflow取得了联系,以获取有关如何学习如何运行动态SQL的帮助。

我得到的答案非常有用,但没有给出确切的原因或原因的解释。现在,我试图在代码中添加另一个参数,但在添加它时遇到了麻烦。

我希望有人帮助我更正参数,以便正确输入参数并解释动态SQL语句中发生的情况。

让我们解决查询问题。一切正常,因为另一个StackOverflow海报可以正确运行。但是现在我需要在“ ControlID”列必须以字母Q开头的地方添加。 用我现在放入的方式,我收到一个错误,指出“ ControlID”列不存在。但是当我检查ControlID是否是正确的列名

select * FROM [EDDS1111111].[EDDSDBO].[Document] where ControlID like 'Q%'

我确实得到了结果。因此,它不是无效的列名。 我设计的“ ControlID”输入类似于在代码中之前添加工件ID的方式,因此我对为什么收到此错误感到困惑。

-- this is used to add line breaks to make code easier to read
DECLARE @NewLine AS NVARCHAR(MAX) = CHAR(10)

-- to hold your dynamic SQL for all rows/inserts at once
DECLARE @sql NVARCHAR(MAX) = N'';

-- create temp table to insert your dynamic SQL results into 
IF OBJECT_ID('tempdb..#DatabaseSizes', 'U') IS NOT NULL
    DROP TABLE #DatabaseSizes;

create table #DatabaseSizes(
    controlid nvarchar(128),
    fileSize DECIMAL (10,6),
    extractedTextSize DECIMAL(10,6)
)

SELECT @sql = @sql + N'' + 
    'select SUM(fileSize)/1024/1024/1024 as fileSize, 
SUM(extractedTextSize)/1024/1024 as extractedTextSize ' + @NewLine +          
    'FROM [EDDS' + CAST(ArtifactID as nvarchar(128)) + '].[EDDSDBO]. 
[Document] ed' + @NewLine +
   'where ed.CreatedDate >= (select CONVERT(varchar,dateadd(d,- 
(day(getdate())),getdate()),106)) and ed.controlid = '+Cast(Controlid as 
nvarchar(128))+'%' + @NewLine + @NewLine
FROM edds.eddsdbo.[Case]
WHERE name like '%Review%' and (StatusCodeArtifactID = '1780779' or 
StatusCodeArtifactID = '1034288')

--controlid always needs to begin with a Q 

-- for testing/validating 
PRINT @sql

INSERT INTO #DatabaseSizes (
    controlid,
    fileSize,
    extractedTextSize
)
-- executes all the dynamic SQL we just generated
EXEC sys.sp_executesql @SQL;

到目前为止,我已经编写了代码,我希望controlID等于当前控件ID(以Q开头)。 我试图复制正确完成的部分,所以有些困惑。感谢您对我的理解有所帮助。

谢谢您的时间

edds.eddsdbo。[case]中没有ControlID列。但是它确实存在于FROM [EDDS'+ CAST(ArtifactID as nvarchar(128))+']。[EDDSDBO]。[Document]中的所有数据库中。 CreatedDate在。[Case]表中也不存在,但在.Document数据库中确实存在。这就是为什么我将ControlID的搜索放在查询的.Document部分的where语句旁边的原因

这是我尝试运行代码时返回的内容。

Invalid column name 'Controlid'.

0 个答案:

没有答案