【发布时间】:2023-04-11 07:52:01
【问题描述】:
这是我的脚本 - 当我执行这个存储过程时,我得到一个错误
列名无效
代码:
CREATE PROCEDURE EdilzSaf_Landing.test_hassan123
@x varchar(128),
@y varchar(128)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sql nvarchar(max);
SET @sql= N'SELECT S.name as SchemaName,
T.name as TableName,
I.name as IndexName,
DDIPS.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS DDIPS
INNER JOIN sys.tables T on T.object_id = DDIPS.object_id
INNER JOIN sys.schemas S on T.schema_id = S.schema_id
INNER JOIN sys.indexes I ON I.object_id = DDIPS.object_id
AND DDIPS.index_id = I.index_id
WHERE DDIPS.database_id = DB_ID()
AND I.name IS NOT NULL
AND S.Name = ' + QuoteName(@x) + '
AND T.Name = ' + QuoteName(@y) + '
AND DDIPS.avg_fragmentation_in_percent > 0
ORDER BY DDIPS.avg_fragmentation_in_percent DESC'
EXECUTE sp_executesql @sql
END
EXECUTE EdilzSaf_Landing.test_hassan123 @x='EdilzSAF_Landing', @y='BUNDLE'
【问题讨论】:
-
很确定
S.Name = '+QuoteName(@x)+'没有做你认为的那样;所有sys对象都没有名为EdilzSAF_Landing或BUNDLE的列。您确定在这里需要动态 SQL 吗?当然@x和@y应该是静态查询的参数,不是吗? -
同意,这不应该是动态的
-
由于使用了无意义的参数名称而值得反对。
-
@SMor 同意了。人们需要停止这种大声笑
标签: sql-server azure stored-procedures