使用动态 SQL 时列名无效
Invalid column name when using dynamic SQL
我要执行下面的T-SQL动态语句:
CREATE PROCEDURE MergeTable @TableName NVARCHAR(max)
AS BEGIN
DECLARE @MergeStatement NVARCHAR(max)
SET @MergeStatement = 'SELECT Query FROM dbo.QueryMergeDWH WHERE SourceTableName = ' + @TableName
EXEC sp_executesql @MergeStatement
END
EXEC MergeTable @TableName = 'SGPREINVOICE'
但是,这给了我以下错误:
Msg 207, Level 16, State 1, Line 17 Invalid column name
'SGPREINVOICE'.
这确实有效:
SELECT 'SELECT Query FROM dbo.QueryMergeDWH WHERE SourceTableName = ' + 'SGPREINVOICE'
我做错了什么?
您需要参数化您的动态查询。所以你一路通过@TableName
通过
CREATE PROCEDURE MergeTable @TableName NVARCHAR(max)
AS
DECLARE @MergeStatement NVARCHAR(max);
SET @MergeStatement = '
SELECT Query
FROM dbo.QueryMergeDWH
WHERE SourceTableName = @TableName;
';
EXEC sp_executesql
@MergeStatement,
N'@TableName nvarchar(max)',
@TableName = @TableName;
GO
但不清楚它的动态是什么,你也可以这样做
CREATE PROCEDURE MergeTable @TableName NVARCHAR(max)
AS
SELECT Query
FROM dbo.QueryMergeDWH
WHERE SourceTableName = @TableName;
GO
我要执行下面的T-SQL动态语句:
CREATE PROCEDURE MergeTable @TableName NVARCHAR(max)
AS BEGIN
DECLARE @MergeStatement NVARCHAR(max)
SET @MergeStatement = 'SELECT Query FROM dbo.QueryMergeDWH WHERE SourceTableName = ' + @TableName
EXEC sp_executesql @MergeStatement
END
EXEC MergeTable @TableName = 'SGPREINVOICE'
但是,这给了我以下错误:
Msg 207, Level 16, State 1, Line 17 Invalid column name 'SGPREINVOICE'.
这确实有效:
SELECT 'SELECT Query FROM dbo.QueryMergeDWH WHERE SourceTableName = ' + 'SGPREINVOICE'
我做错了什么?
您需要参数化您的动态查询。所以你一路通过@TableName
通过
CREATE PROCEDURE MergeTable @TableName NVARCHAR(max)
AS
DECLARE @MergeStatement NVARCHAR(max);
SET @MergeStatement = '
SELECT Query
FROM dbo.QueryMergeDWH
WHERE SourceTableName = @TableName;
';
EXEC sp_executesql
@MergeStatement,
N'@TableName nvarchar(max)',
@TableName = @TableName;
GO
但不清楚它的动态是什么,你也可以这样做
CREATE PROCEDURE MergeTable @TableName NVARCHAR(max)
AS
SELECT Query
FROM dbo.QueryMergeDWH
WHERE SourceTableName = @TableName;
GO