データベース全体でテキスト文字列を検索する独自のプロシージャを作成しようとしていますが、動的SQL関連のエラーが発生しています。私は利用可能な他の手順があることを知っていますが、私はちょうど練習するために私自身を作成しようとしたかったのです。それはしばらくして、私はまだこれを理解することはできません...誰かが動的SQLの知識を手に入れてくれますか
USE AdventureWorks2014
GO
SET NOCOUNT ON;
DECLARE @tablename nvarchar(max) = ''
DECLARE @colname nvarchar(128)
DECLARE @searchstring nvarchar(max) = 'Ken'
IF OBJECT_ID('tempdb..#Results') IS NOT NULL
DROP TABLE #Results
IF OBJECT_ID('tempdb..#Dynamic') IS NOT NULL
DROP TABLE #Dynamic
CREATE TABLE #Results (tablename nvarchar(max), colname nvarchar(128))
CREATE TABLE #Dynamic (colname nvarchar(128))
WHILE @tablename IS NOT NULL
BEGIN
SET @colname = ''
SET @tablename = (
SELECT MIN(SCHEMA_NAME(ta.schema_id) + '.' + ta.name)
FROM sys.tables ta
WHERE SCHEMA_NAME(ta.schema_id) + '.' + ta.name > @tablename
AND ta.object_id IN (
SELECT DISTINCT(c.object_id)
FROM sys.columns c
JOIN sys.types t
ON c.user_type_id = t.user_type_id
AND t.name IN ('varchar', 'nvarchar','char','name')
)
)
WHILE (@tablename IS NOT NULL) AND (@colname IS NOT NULL)
BEGIN
SET @colname = (
SELECT MIN(c.name)
FROM sys.columns c
JOIN sys.types t
ON c.user_type_id = t.user_type_id
AND t.name IN ('nvarchar', 'varchar','char','name')
AND c.object_id = OBJECT_ID(@tablename)
and c.name > @colname
)
IF @colname IS NOT NULL
BEGIN
SET @tablename = QUOTENAME(@tablename)
SET @colname = QUOTENAME(@colname)
INSERT INTO #Results
EXEC
(
'SELECT '+ @colname +
' FROM ' [email protected] +
' WHERE ' + @colname + ' IN ' + @SearchString
)
END
END
END
[なぜ誰かが私を助けることができますか?実際の質問ではありませんか?](https://meta.stackoverflow.com/q/284236/62576)と書く*エラーが発生し続ける*は、まったく役に立たない問題の記述です。あなたが得ている*エラー*は、あなたの画面上のあなたの前にあります。あなたの投稿にそれらを含めることに失敗する理由は全くありませんので、私たちは利用可能な情報も持っています。 **あなたの**問題を解決するために私たちの時間を寄付するよう頼んでいます。 **あなたの画面に**適切な関連情報を含めることにより、可能な限り簡単に行う必要があります**。 –