我创建了一个带有 3 个参数的存储过程。我对第二个参数([HQ-211-STOCK-DBO])有疑问。我一直试图弄清楚它已经有一段时间了。
这是对 SP 的调用:
EXEC [dbo].[spColumnsChanged] '[HQ-193-STOCK-DBO]','[HQ-211-STOCK-DBO]','arch_conv_col_diffs'
在 SP 中,我有以下代码:
CREATE PROCEDURE [dbo].[spColumnsChanged] (@sr_database nvarchar(128),@tr_database nvarchar(128),@diff_table nvarchar(128))
...
SET @DFCursor = CURSOR FAST_FORWARD FOR
SELECT o.name table_name, col.name column_name, t.name data_type, col.max_length, col.is_nullable
FROM @tr_database.sys.columns col
INNER JOIN @tr_database.dbo.sysobjects o on o.id = col.object_id
INNER JOIN @tr_database.sys.types t ON t.user_type_id = col.user_type_id
WHERE o.xtype = 'U' -- user tables
ORDER BY o.name, col.column_id
当我运行 SP 时,我收到错误消息:“(消息 102,第 63 行)'.' 附近的语法不正确。”
第 63 行是使用 SP 的第三个参数的 FROM 语句。(@tr_database)
有趣的是,如果我用实际参数值代替参数,如下所示:
SELECT o.name table_name, col.name column_name, t.name data_type, col.max_length, col.is_nullable
FROM [HQ-211-STOCK-DBO].sys.columns col
INNER JOIN [HQ-211-STOCK-DBO].dbo.sysobjects o on o.id = col.object_id
INNER JOIN [HQ-211-STOCK-DBO].sys.types t ON t.user_type_id = col.user_type_id
WHERE o.xtype = 'U' -- user tables
ORDER BY o.name, col.column_id
它工作正常。
任何人都可以发现错误吗?