我有一个数据库,我保存所有存储过程和函数'utils'
这些对象应该能够从其他数据库中调用。
这是我遇到问题的存储过程
USE [Utils]
GO
/****** Object: StoredProcedure [dbo].[usp_trim_all_string_columns] Script Date: 13/12/2016 10:54:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_trim_all_string_columns] @DatabaseName Varchar(100), @SchemaName Varchar(100),@TableName Varchar(100)
AS
BEGIN
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + ',[', '[') +
COLUMN_NAME + ']=LTRIM(RTRIM([' + COLUMN_NAME + ']))'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = @SchemaName AND TABLE_NAME = @TableName AND DATA_TYPE Like '%char%'
SET @SQL = 'UPDATE [' + @SchemaName + '].[' + @TableName + '] SET ' + @SQL
EXEC (@SQL)
END
代码中有一行总是失败
FROM INFORMATION_SCHEMA.COLUMNS
原因是sp属于utils
数据库,因此只查找utils
模式中存在的列。我需要能够参数化该行,以便我可以传递数据库名称,如此
FROM MYDATABASE.INFORMATION_SCHEMA.COLUMNS
我尝试使用
FROM @DatabaseName.INFORMATION_SCHEMA.COLUMNS
但失败,因为@DatabaseName
只是一个字符串
有人帮忙吗?
答案 0 :(得分:1)
将此SP传播到所有数据库,然后:
dogleg
或将其重写为完全动态的sql,其中DB定义了动态sql。