0
我创建了一个带有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我收到错误: “(Msg 102,Line 63)'。'附近的语法错误。”
第63行是FROM语句,它使用SP的第三个参数。 (@tr_database)
有趣的是,如果我substitue实际参数值,像这样的参数:
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
它工作正常。
任何人都可以发现错误?
哪一行是63 – AhmetEmre90
您不能像这样使用数据库名称的参数:'@ tr_database.sys.types'。您需要使用EXEC并从该参数构建一个字符串。见[这个答案](http://stackoverflow.com/questions/2073544/set-database-name-dynamically-in-sql-server-stored-procedure) – CodingIntrigue