私はすべてのストアドプロシージャとファンクションを保持するデータベースを持っています'utils'
これらのオブジェクトは他のデータベースから呼び出すことができます。ストアドプロシージャにデータベース名を渡す方法
これは、私はいつも理由はspはそうutils
データベースに属していることである
FROM INFORMATION_SCHEMA.COLUMNS
を失敗したコードの行があり
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
で問題が生じていますストアドプロシージャですutils
スキーマに存在する列のみが検索されます。私はそう
FROM MYDATABASE.INFORMATION_SCHEMA.COLUMNS
のようにデータベース名を渡すことができますので、私はその行をパラメータ化できるようにする必要があります私は
FROM @DatabaseName.INFORMATION_SCHEMA.COLUMNS
を使用しようとしたが、@DatabaseName
は単なる文字列であるとして、それは失敗し
どんな人ですか?
申し訳ありませんSQL Serverでは、データベース名やテーブル名などの識別子を変数として渡すことはできません。あなたができることは、[動的SQL](https://msdn.microsoft.com/en-us/library/ms188001.aspx?f=255&MSPPError=-2147217396)をビルドして実行することです。あるいは、@ IvanStarostinの助言に従って、SPのコピーをすべてのデータベースに置くこともできます。 2つのアプローチのうち、私は後者を好むが、あなたの設定についてもっと知ることなく、一方のアプローチを他のものよりも推奨するのは難しい。 –