Ole*_*rov 6 sql sql-server stored-procedures linked-server
我有一个存储过程应该能够在我的MS Sql Server上的任何数据库的任何表上执行.EXEC和USE语句的大多数组合都没有产生任何结果.这是存储过程:
CREATE PROCEDURE [dbo].[usp_TrimAndLowerCaseVarcharFields]
(
@Database VARCHAR(200),
@TableSchema VARCHAR(200),
@TableName VARCHAR(200)
)
AS
BEGIN
DECLARE @sSql VARCHAR(MAX)
SET @Database = '[' + @Database + ']'
SET @sSql = ''
-- Create first part of a statement to update all columns that have type varchar
SELECT @sSql = @sSql + COLUMN_NAME + ' = LOWER(RTRIM(' + COLUMN_NAME + ')), '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'varchar'
AND TABLE_CATALOG = @Database
AND TABLE_SCHEMA = @TableSchema
AND TABLE_NAME = @TableName
SET @sSql = 'UPDATE ' + @Database + '.' + @TableSchema + '.' + @TableName + ' SET ' + @sSql
-- Delete last two symbols (', ')
SET @sSql = LEFT(@sSql, LEN(@sSql) - 1)
EXEC(@sSql)
END
Run Code Online (Sandbox Code Playgroud)
请在[OtherDB]上建议我要做什么来执行它.[TargetTable].
Cod*_*ian 17
您可以完全限定表和存储过程.换句话说,你可以这样做:
UPDATE [OtherDB].[Schema].[targetTable] SET ...
Run Code Online (Sandbox Code Playgroud)
看来你已经在你的过程中这样做了.
您还可以使用完全限定名称来执行存储过程 - 例如
EXEC [OtherDB].[dbo].[usp_TrimAndLowerCaseVarcharFields]
Run Code Online (Sandbox Code Playgroud)
老实说,你的proc看起来很好,你收到任何错误信息吗?如果是这样,请发布它们.此外,请确保您的用户可以访问其他数据库.